繁体   English   中英

从结构创建二进制块

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM