复制到较大大小的变量中
Copying into a variable with larger size
我有一个uint8_t (uint8_t mydata[1000])
类型的大数组。我只想从这个大数组中复制4字节长的数据。如果我将4个字节的数据复制到64位整数变量中,可以吗?还是应该像uint32_t
一样将目标变量定义为4字节长度?
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
s中的32位整数,您想将其用作整数,则会遇到需要处理的字节序问题。
目前尚不清楚复制到uint64_t
的"第一个"(按地址)字节是否能获得所需的值,这取决于当前机器的字节序。
在小型endian机器上它可以工作,但在大型endian机器中它不会工作。
最好是逐字节提取值,因为这样可以明确每个字节的含义。
/* Extract 32-bit little-endian value. */
mysentS = (mydata[16] << 0) + (mydata[17] << 8) +
(mydata[18] << 16) + (mydata[19] << 24);
这是因为在应用移位之前,移位表达式的左侧被提升为unsigned int
。
这取决于你要做什么。如果你要将4个字节的带符号整数复制到没有符号的整数,或者如果你要跳过endiannes(如果使用了任何endiannes),你会得到不同的结果。对于编译器来说,它看起来不错。
相关文章:
- 是否可以初始化不可复制类型的成员变量(或基类)
- 使用仅使用一次的变量调用的复制构造函数.这可能是通过调用move构造函数进行编译器优化的情况吗
- 访问类成员而不复制此变量或互斥变量
- 字符串变量,比如说"字符串str",可以直接复制到数组中吗?
- 复制文件流C++静态变量
- 为什么我可以使用 memcpy 将一个对象变量复制到另一个对象变量
- 使变量不可复制的紧凑方法
- C++为具有引用成员变量的类创建复制构造函数
- 如何将几个变量复制到其他变量
- 如何在 cuda 中将结构的指针变量从主机复制到设备
- memcpy() 在一个类中被调用以复制到另一个类变量中后会引发异常
- 复制一个对象并使两者共享一个成员变量 (C++)
- 我的 c 字符串复制函数正在损坏其他变量的堆栈
- 如何在不定义目标变量大小的情况下逐个字符将字符串变量复制到另一个字符
- 我的字符串没有从私有变量复制
- 如何在传递右值引用函数参数时从基元类型变量复制
- 将 Timeval 成员变量复制到整数变量
- 从常量变量复制向量
- 将成员变量复制到字节向量中
- 我如何将CHAR变量复制到c++中的WCHAR变量