gpt4 book ai didi

c++ memcpy一个结构到一个字节数组

转载 作者:搜寻专家 更新时间:2023-10-31 01:39:51 27 4
gpt4 key购买 nike

我在将结构数据复制到我的 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com