结构体赋值给数组

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能实现吗?

阅读 5.8k
2 个回答

用memcopy当然可以。
在这个层面你可以放弃数据是有类型的概念,也就是,数据全部是无类型,就是一块内存区域,那无非就是一块内存区域拷贝到另外一块内存区域罢了。

但是,如果你想使用这种方法进行网络通讯或者保存为文件的操作,要传递给别的程序处理,那么必须要注意 数据格式兼容性,还有字节序。

1.肯定是可以使用memcpy把结构体DATA变量的内存内容拷贝到char数组的缓冲区,但是请注意结构体是有内存对齐的要求的,故结构体变量最后可能存在一些填充字节用于内存对齐,而这些填充的内容是随机的。

2.你这么操作,肯定是想把结构体变量的信息通过网络或者管道传送给其他进程,结构体变量转换为字节流的这种操作称之为序列化的过程,序列化过程中需要考虑网络字节序和本地字节序的问题,当然还有反序列化的过程,因为对端收到字节流后需要把字节流转换为结构体,目前比较流行序列化与反序列化库有json和protobuf,它们有封装好的序列化和反序列化接口,使得整个序列化和反序列化的过程对使用者透明。

3.这种问题的最终要实现无非就是想自己应用层数据的协议封装,建议查看https://segmentfault.com/a/11... 这篇文章,对上述1,2点都有详细的描述。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏