【发布时间】:2019-03-14 06:52:12
【问题描述】:
我定义了一个基于字节的结构,大小为 3 个字节。 (1个packetID和2个packetSize)我用sizeof函数检查了大小,效果很好:
#pragma pack(1)
typedef struct ENVIRONMENT_STRUCT{
unsigned char packetID[1];
unsigned char packetSize[2];
}
我像这样创建了一个变量并保留了内存:
ENVIRONMENT_STRUCT * environment_struct = new ENVIRONMENT_STRUCT();
现在我想初始化 environment_struct。
问题是我试图通过属性初始化这个结构,就像这样:
*environment_struct->packetSize = 100;
但是当我检查这个值时,使用:
std::cout << "Packet Size: " << environment_struct->packetSize << endl;
结果:数据包大小:d
预期结果:数据包大小:100
如果我将使用数字,我应该使用 csdint 库定义结构吗?比如u_int8和这种类型的变量。
【问题讨论】:
-
您真的要使用 1 个字符的数组,还是只使用一个字符可以?同样,您是否希望
packetSize是两个字节的数组,还是可以使用unsigned short? -
感谢使用 unsigned char,因为我可以控制字节大小......但是通过这个例子,我明白最好使用 csdint 库来定义带有 u_int8 和 uint_16 的结构。你怎么看?
-
当您需要控制数据的确切大小时,我认为这些会非常有效。
-
完美,我将使用 csdint 库重新定义结构。谢谢。
标签: c++ pointers struct typedef