struct DATA {
unsigned char nStart1;
unsigned char nStart2[1];
unsigned char nOrder;
unsigned char nID;
signed nT;
signed int nTemp;
int nCRC;
unsigned char nEnd;
};
想将上述的数据结构赋值给 char buff[],可以吗?
用memcpy能实现吗?
struct DATA {
unsigned char nStart1;
unsigned char nStart2[1];
unsigned char nOrder;
unsigned char nID;
signed nT;
signed int nTemp;
int nCRC;
unsigned char nEnd;
};
想将上述的数据结构赋值给 char buff[],可以吗?
用memcpy能实现吗?
1.肯定是可以使用memcpy把结构体DATA变量的内存内容拷贝到char数组的缓冲区,但是请注意结构体是有内存对齐的要求的,故结构体变量最后可能存在一些填充字节用于内存对齐,而这些填充的内容是随机的。
2.你这么操作,肯定是想把结构体变量的信息通过网络或者管道传送给其他进程,结构体变量转换为字节流的这种操作称之为序列化的过程,序列化过程中需要考虑网络字节序和本地字节序的问题,当然还有反序列化的过程,因为对端收到字节流后需要把字节流转换为结构体,目前比较流行序列化与反序列化库有json和protobuf,它们有封装好的序列化和反序列化接口,使得整个序列化和反序列化的过程对使用者透明。
3.这种问题的最终要实现无非就是想自己应用层数据的协议封装,建议查看https://segmentfault.com/a/11... 这篇文章,对上述1,2点都有详细的描述。
1 回答2.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
2 回答1.4k 阅读
1 回答1.6k 阅读✓ 已解决
2 回答1.1k 阅读✓ 已解决
用memcopy当然可以。
在这个层面你可以放弃数据是有类型的概念,也就是,数据全部是无类型,就是一块内存区域,那无非就是一块内存区域拷贝到另外一块内存区域罢了。
但是,如果你想使用这种方法进行网络通讯或者保存为文件的操作,要传递给别的程序处理,那么必须要注意 数据格式兼容性,还有字节序。