【发布时间】:2018-10-19 08:42:24
【问题描述】:
我有一个看起来像这样的结构:
#pragma pack(1)
typedef struct WHEATHER_STRUCT {
uint8_t packetID; // Value 9
uint16_t packetSize; // Value 7
float cloudLayerAltitude; // Value 25000
} Wheather_Struct
此结构已正确初始化。由于算法的设计,我需要通过指针偏移来读取这三个属性值。我感谢声明一个数组,该数组具有这些属性的字节大小。就像:
int sizeOfStructAttributes = {1, 2, 4};
最后要访问这些值,请执行以下操作:
pointer = (*this->wheather_struct->packetID)
for (i=0; i<sizeof(sizeOfStructAttributes); i++)
cout << &pointer << ' ';
pointer = pointer + sizeOfStructAttributes[i];
预期结果:
9 7 25000
你能帮帮我吗?
【问题讨论】:
-
“由于算法的设计,我需要通过指针偏移量读取这三个属性值。”改变算法的设计。处理结构内部通常是个坏主意,而且它不是可移植的解决方案。
-
我需要这样做,因为我将开发一种算法,该算法使用属性的大小值读取不同结构的值。
-
您可以使用offsetof。不过,这看起来像 XY problem。
-
@Yksisarvinen 是对的 - 避免通过偏移量访问结构的内部。它很脆弱并且容易出错。还有更好的方法。
-
“预期结果:9 7 25000”,因此您还需要变量的大小(可能还需要输入)。