如何在C ++中将struct成员的十六进制值写入unsigned char数组?

时间:2019-06-13 20:52:26

标签: c++

我在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};

1 个答案:

答案 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);

由于无法预测的行为,我不建议您做这种事情,但这似乎正是您要的。