gpt4 book ai didi

c++ - 复制到一个更大的变量

转载 作者:行者123 更新时间:2023-11-28 07:31:48 25 4
gpt4 key购买 nike

我有一个类型为 uint8_t (uint8_t mydata[1000]) 的大数组。我只想从这个大数组中复制 4 字节长度的数据。如果我将 4 个字节的数据复制到 64 位整数变量中可以吗?或者我应该将目标变量定义为 4 字节长度,如 uint32_t

uint8_t mydata[1000];

uint64_t mysentS; //Is this okay when coping 4 bytes of data or should it be uint32_t?
uint64_t mysentUS;

memcpy(&mysentS, &mydata[16], 4);
memcpy(&mysentUS, &mydata[20], 4);

最佳答案

没关系,就像“它不会崩溃”一样,但这是非常可怕的代码。

假设字符数组中的位置在 4 个 char 中包含一个 32 位整数,您希望将其用作整数,您会遇到 endianness您需要处理的问题。

尚不清楚复制到 uint64_t 的“第一个”(地址方面)字节是否可以获得您想要的值,这取决于当前机器的字节顺序。

在小端机器上它会工作,但在大端机器上它不会。

最好是逐字节提取值,这样您就可以明确每个字节表示什么。

/* Extract 32-bit little-endian value. */
mysentS = (mydata[16] << 0) + (mydata[17] << 8) +
(mydata[18] << 16) + (mydata[19] << 24);

这是有效的,因为在应用移位之前,移位表达式的左侧被提升为 unsigned int

关于c++ - 复制到一个更大的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17524285/

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