怎样发送一个结构体数据?(来个给力的爷们)

[复制链接]
13584|23
 楼主| qink2008 发表于 2011-1-7 10:42 | 显示全部楼层 |阅读模式
假设我的一个串口发送字符串子函数为
void sendbyte (uint8 byte)
void sendstring(uint8 *string)
我要发送一个结构体数据
struct dat
{
   uint8 a;
   int8 b;
   int16 c;
   int8 *d;
}shuju;
应该怎样调用串口发送函数把这个结构体发送出去呢
聆风 发表于 2011-1-7 11:16 | 显示全部楼层
将结构体数据指针转换成uint8* 发送
 楼主| qink2008 发表于 2011-1-7 11:26 | 显示全部楼层
咋转?来点具体的。
是这样?
struct dat *pshuju=&shuju;
sendstring((uint8)pshuju);
huangqi412 发表于 2011-1-7 12:17 | 显示全部楼层
指针。。。

LZ自己发送以下不就知道了
new1988 发表于 2011-1-7 16:16 | 显示全部楼层
sendstring((uint*)&shuju);
就OK啦!!!
括号里面的意思是把shuju这个结构体的地址强制转换成uint型地址。
原野之狼 发表于 2011-1-7 22:50 | 显示全部楼层
调用发送字符串的函数是不行的 因为结构体的数据并不是字符类型 那么怎么去辨别数据的个数呢
因该这么做
设计一个底层函数
void send_dat(char *pdat, unsigned int len);
然后这样使用
send_dat((char*)(&shuju), sizeof(shuju));

评分

参与人数 2威望 +3 收起 理由
123jj + 1
古道热肠 + 2

查看全部评分

古道热肠 发表于 2011-1-8 00:13 | 显示全部楼层
呵呵,楼上正解。sizeof用得很好。
 楼主| qink2008 发表于 2011-1-8 10:25 | 显示全部楼层
6# 原野之狼
这个貌似不错
tyj_3 发表于 2011-1-8 10:56 | 显示全部楼层
用send_dat((char*)(&shuju), sizeof(shuju))发送的时候注意结构体的字节对齐方式,sizeof(shuju)可能比你实际要发送的字节数多.
汽车电子 发表于 2011-1-8 12:19 | 显示全部楼层
如果是非8位单片机,要注意对齐方式,否则有可能发送字节数出错。
原野之狼 发表于 2011-1-8 13:38 | 显示全部楼层
9、10L的意见值得关注:lol
原野之狼 发表于 2011-1-8 13:41 | 显示全部楼层
实际上我在做通信程序的时候是不会这么干的
考虑到通讯双方的体系结构以及编译规则 LZ最好是制定一个通用的协议来进行通讯
wswh2o 发表于 2011-1-8 23:04 | 显示全部楼层
对齐是个问题
mxh0506 发表于 2011-1-9 20:15 | 显示全部楼层
在不同的硬件平台之间传递数据,alignment和endian convention都是不能忽视的,必须调整一致
发送函数的原型可以这样定义:
void send_data(void *pData, unsigned char byLen);
然后这样调用
send_data(&myStruct, sizeof(myStruct));
光速 发表于 2011-2-7 15:58 | 显示全部楼层
shuju? 变量名尽量不要使用拼音
china_fog 发表于 2011-2-7 16:25 | 显示全部楼层
这个试试不就知道了吗,经常干的事情吧
coody 发表于 2011-2-7 17:53 | 显示全部楼层
强转单字节指针
123jj 发表于 2011-2-8 06:35 | 显示全部楼层
小狼正解。mxh0506老师总结的不错,学习了。
xjycug 发表于 2011-2-8 12:20 | 显示全部楼层
用联合体的方式,使结构体与字节数组指向相同的地址就行了。
不过考虑到结构里面又是有符号又是无符号,又是数据又是指针的,还是比较麻烦啊。。。
dandywang 发表于 2011-2-10 11:50 | 显示全部楼层
狼讲的好,学习了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

3

主题

8

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部