C++ 如何将struct成员的十六进制值写入C+中的无符号字符数组+;?
我在typedef结构中有uint32_t type成员,这些成员用4字节的十六进制值初始化。我想将成员变量的每个字节写入一个无符号字符数组 这是结构: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;
#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 我现在要说的很多内容取决于您的系统和编译器 有几种方法可以做你想做的事情
- 联合
- 参考文献
- 指针
- 相互抄袭
我不能推荐做这种事情,因为这是不可预测的行为,但这似乎是你所要求的。查找
memcpy
。为什么struct obj
当你的源代码是uint32\u t
时?请澄清你想要什么和你尝试了什么。这可能意味着一些不同的事情。@stark源代码不是uint32\u t
。源代码是一个具有uint32\u t
成员的类。联合很好(而且不必要,因为您已经可以使用unsigned char*
进行别名)。然而,它不能保证做你想做的,因为填充。虽然它可能会起作用。OP最好完全避免最初的问题(不管是什么),如果我的问题不清楚,我很抱歉。我已经添加了我正在寻求帮助的代码部分。