[英]Creating Binary Block from struct
我希望标题描述的是问题,如果有人有更好的主意,我会予以解决。
我将信息存储在这样的结构中:
struct AnyStruct
{
AnyStruct() :
testInt(20),
testDouble(100.01),
testBool1(true),
testBool2(false),
testBool3(true),
testChar('x') {}
int testInt;
double testDouble;
bool testBool1;
bool testBool2;
bool testBool3;
char testChar;
std::vector<char> getBinaryBlock()
{
//how to build that?
}
}
该结构应通过网络在具有以下结构的二进制字节缓冲区中发送:
Bit 00- 31: testInt
Bit 32- 61: testDouble most significant portion
Bit 62- 93: testDouble least significant portion
Bit 94: testBool1
Bit 95: testBool2
Bit 96: testBool3
Bit 97-104: testChar
根据此定义,生成的std :: vector的大小应为13个字节(char ==个字节)
现在我的问题是如何从已有的不同数据类型中形成这样的数据包。 我已经阅读了很多页面,发现了诸如std :: bitset或boost :: dynamic_bitset之类的数据类型,但似乎都不能解决我的问题。
我认为很容易看出,上面的代码只是一个示例,原始标准要复杂得多,并且包含更多不同的数据类型。 我认为解决以上示例也应解决我的复杂结构问题。
最后一点:仅通过使用标准的,可移植的C ++语言功能(例如STL或Boost(
我认为您需要的全部内容都在此FAQ中进行了描述: http : //www.parashift.com/c++-faq-lite/serialization.html
基本上,您将分配一个无符号char
(BYTE)数组,该数组的长度为您类中所有变量的总大小(使用sizeof()
)。 然后,您可以使用memcpy
在正确的偏移量上复制每个变量的内容。
请注意,这只是一种基本方法,我明确建议查看zerm答案中的c ++常见问题解答链接。
现在,我使用了std::bitset
为数据类型生成位序列,然后将这些位集连接为一个大位集。 然后,它保存了我需要的数据。 我只需要检查小/大字节序。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.