我希望标题描述问题,如果有人有更好的想法,我会改变它。
我将信息存储在这样的结构中:
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 == byte)
我现在的问题是如何从我得到的不同数据类型中形成这样的数据包。我已经阅读了很多页面并找到了像std :: bitset或boost :: dynamic_bitset这样的数据类型,但似乎都没有解决我的问题。
我认为很容易看出,上面的代码只是一个例子,原始标准要复杂得多,并且包含更多不同的数据类型。解决上面的例子也应该解决我对复杂结构的问题。
最后一点: 这个问题应该通过使用标准的,可移植的C ++语言特性(如STL或Boost)来解决(
答案 0 :(得分:1)
我认为您需要的所有内容都在此常见问题解答中描述: http://www.parashift.com/c++-faq-lite/serialization.html
答案 1 :(得分:0)
基本上,您将分配一个无符号char
(BYTE)数组,其长度为类中所有变量的总大小(使用sizeof()
)。然后,您将使用memcpy
将正确偏移量复制每个变量的内容。
请注意,这只是一种基本方法,我绝对建议在zerm的答案中查看c ++ faq链接。
答案 2 :(得分:0)
我现在使用std::bitset
为数据类型生成位序列,然后将这些位集连接到一个大位集。
这样就可以保存我需要的数据。我只需检查一下/大端。