gpt4 book ai didi

c++ - 在 C++ 中初始化结构中的 const 数组

转载 作者:太空狗 更新时间:2023-10-29 20:15:01 25 4
gpt4 key购买 nike


我必须在 Prop 上工作。二进制文件格式,想用结构体来实现它。
我的结构和 atm 中需要恒定的字节序列,但我不知道如何实现这一点。

我想过类似的事情:

#include <cstdint>
#pragma pack(push,1)

typedef struct PAYLOAD_INFO {
const uint8_t magicnumber[4] = { 0xFA, 0x11 , 0x28 , 0x33 };
uint16_t UMID;
const uint16_t VID = 1487 ;
uint32_t crc;
};

#pragma pack(pop)

int main (){
PAYLOAD_INFO pldInst;
pldInst.UMID = 5;
pldInst.crc = 0x34235a54;
...
writeToFile(&PAYLOAD_INFO,sizeof(PAYLOAD_INFO));
}

最后“pldInst”应该看起来像那样(在内存中),不考虑本例中的字节顺序:

0x00000000:  0xFA, 0x11 , 0x28 , 0x33
0x00000004: 0x00, 0x05 , 0x05 , 0xCF
0x00000008: 0x34, 0x23 , 0x5a , 0x54

我已经尝试过“默认”方法:

#include <cstdint>
#pragma pack(push,1)

typedef struct PAYLOAD_INFO {
static const uint8_t magicnumber[4];
uint16_t UMID;
static const uint16_t VID = 1487 ;
uint32_t crc;
};

const uint8_t magicnumber[4] = { 0xFA, 0x11 , 0x28 , 0x33 };

#pragma pack(pop)

但没有按预期工作。

有没有办法在不计算每个结构成员的内存大小、分配新内存和复制每个成员的情况下完成这项工作?

我使用的是 g++ 4.6.3。

注意,托马斯

更新:
@bikeshedder 提供的 c++11 解决方案工作得很好,但它只能用 g++ 4.7 或更高版本编译。

最佳答案

您的静态目前只是定义了一个全局静态。您需要添加一个类说明符来将静态定义为您的类的一部分。

const uint8_t PAYLOAD_INFO::magicnumber[4] = { 0xFA, 0x11 , 0x28 , 0x33 };

就是说,正如@bikeshedder 在下面提到的,静态变量单独存储在内存中,因此当您创建结构的新实例时,该实例不会在实例的内存位置包含魔数(Magic Number),因此您对 writeToFile 不会像您预期的那样工作。

关于c++ - 在 C++ 中初始化结构中的 const 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14657886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com