我有一个类型为 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/