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

标签 c++ memcpy

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

相关文章:

c++ - 如何只删除不是数字的字符串的第一个字符? (MFC, C++)

c++ - cpp 中的并行 memcpy

C strcpy() - 邪恶?

在C中将数据从一个结构复制到另一个

c++ - 如何将 char 数组作为对函数和 memcpy 的引用传递

c++ - 是否可以定义一个宏来定义枚举类和返回枚举元素计数的 GetCount() 方法?

c++ - 在智能指针的取消引用值上调用 std::move()

c++ - 在 Ctor 调用中将 std::initializer_list 与括号括起来的参数分开

c++ - 同步来自多个对象的异步调用

c++ - 使用 memcpy 复制二维数组?