我在typedef结构中有uint32_t类型成员,这些成员用4个字节的十六进制值初始化。我想将成员变量的每个字节写入一个无符号char数组。
这是结构:
#pragma pack (push, 1)
struct pcap_hdr_s {
uint32_t magic_number;
uint16_t version_major;
uint16_t version_minor;
int32_t thiszone;
uint32_t sigfigs;
uint32_t snaplen;
uint32_t network;
};
#pragma pack (pop,1)
pcap_hdr_s pcap_hdr_tr;
pcap_hdr_tr.magic_number = 0xa1b2c3d4;
pcap_hdr_tr.version_major = 3;
pcap_hdr_tr.version_minor = 1;
pcap_hdr_tr.thiszone = 0;
pcap_hdr_tr.sigfigs = 0;
pcap_hdr_tr.snaplen = 65535;
pcap_hdr_tr.network = 0;
我希望char数组看起来像: 无符号字符a [] = {0xd4 0xc3 0xb2 0xa1 0x3 0x0 0x1 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0x0 0xff 0xff 0x0 0x0 0x0 0x0};
答案 0 :(得分:2)
您似乎在数字和该数字的表示形式之间有些混淆。
11,XI,0xB,013是相同数字的不同文字表示形式:十一。
您显然想将一个4字节整数的字节转换为四个字节。您现在遇到的一个问题是系统如何表示数字。
如果您将4字节整数初始化为0x12345678,则系统可以将其存储为
0x12 0x34 0x56 0x78
或为
0x78 0x56 0x34 0x12
我现在要说的很多内容取决于您的系统和编译器。
有很多方法可以做你想做的事。
例如:
联盟 { struct_obj结构; 无符号字符a [sizeof(struct_obj)] };
struct_object结构; unsigned char * a = reinterpret_cast(&structure);
由于无法预测的行为,我不建议您做这种事情,但这似乎正是您要的。