我在将结构体数据复制到我的 byteArray
时遇到问题。该字节数组用于通过接口(interface)传递信息。对于普通数据类型,我必须使用byteswap
。
但现在我有了一个结构。当我使用memcpy时,结构体的值会被交换。
如何轻松地将结构体“正确”地复制到字节数组?
memcpy(byteArray, &stData, sizeof(stData));
stData
有简单的整数。 0x0001
将作为 0x1000
存储在字节数组中。
最佳答案
如果您使用的是 x86 架构计算机,则整数将以“Little Endian”顺序存储,最低有效字节在前。这就是为什么 0x0001 在字节数组中会显示为 0x01 0x00。只要您也在具有相同架构的机器上解压,这就可以正常工作,但这是二进制序列化不平凡的(许多)原因之一。
如果您需要以安全的方式在机器之间交换二进制数据,那么您可以决定一个标准(例如,将所有二进制数据转换为小端或大端;网络线路协议(protocol)通常转换为大端,尽管许多高性能专有系统坚持使用小尾数法(因为今天这是大多数机器上的 native 格式),或者寻找可移植的二进制文件格式,例如 HDF 或 BSON。 (这些存储有关所存储的二进制数据的元数据。)最后,您可以转换为 ASCII(XML、json)。 (另外,请注意,“大”和“小”并不是唯一的选择 - “每台机器”都是一个艰巨的任务,因为它们还没有全部发明出来。:))
参见wikipedia或者在 SO 上搜索“endian”以获取许多示例。
关于C++ memcpy 将结构体转换为字节数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30562189/