C++ 如何将struct成员的十六进制值写入C+中的无符号字符数组+;?

C++ 如何将struct成员的十六进制值写入C+中的无符号字符数组+;?,c++,C++,我在typedef结构中有uint32_t type成员,这些成员用4字节的十六进制值初始化。我想将成员变量的每个字节写入一个无符号字符数组 这是结构: #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;

我在typedef结构中有uint32_t type成员,这些成员用4字节的十六进制值初始化。我想将成员变量的每个字节写入一个无符号字符数组

这是结构:

#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 0xff 0xff 0x0 0x0 0x0 0x0 0x0 0x0 0x0}

您似乎对一个数字和该数字的表示法有些混淆

<P>11,席、0xb、013是同一数的不同文本表示:十一。 显然,您希望将4字节整数的字节转换为4字节。你现在面临的一个问题是系统如何表示数字

如果将4字节整数初始化为0x12345678,则系统可以将其存储为

0x12 0x34 0x56 0x78

或作为

0x78 0x56 0x34 0x12

我现在要说的很多内容取决于您的系统和编译器

有几种方法可以做你想做的事情

  • 联合
  • 参考文献
  • 指针
  • 相互抄袭
e、 g:

联合 { 结构对象结构; 无符号字符a[sizeof(struct_obj)] } ;

结构对象结构; unsigned char*a=重新解释强制转换(&structure)


我不能推荐做这种事情,因为这是不可预测的行为,但这似乎是你所要求的。

查找
memcpy
。为什么
struct obj
当你的源代码是
uint32\u t
时?请澄清你想要什么和你尝试了什么。这可能意味着一些不同的事情。@stark源代码不是
uint32\u t
。源代码是一个具有
uint32\u t
成员的类。联合很好(而且不必要,因为您已经可以使用
unsigned char*
进行别名)。然而,它不能保证做你想做的,因为填充。虽然它可能会起作用。OP最好完全避免最初的问题(不管是什么),如果我的问题不清楚,我很抱歉。我已经添加了我正在寻求帮助的代码部分。