【问题标题】:Serialize a bool into a single bit in c++ and unserialize into boolean in java在 c++ 中将 bool 序列化为单个位并在 java 中反序列化为 boolean
【发布时间】:2017-03-02 00:25:26
【问题描述】:

我有两个独立的应用程序,一个用 java 编写,另一个用 C++ 编写,它们通过套接字相互通信。我试图通过减少数据结构中的字节数来满足带宽要求。我的部分解决方案是将存储在 C++ 应用程序中的变量作为布尔值作为单个位发送,但我不确定如何将单个 1 或 0 放入我的 char* 缓冲区。我意识到一个 char 必须是一个完整的字节,但是我有许多 bool 可以作为 1 和 0 在相同字节中通过套接字传递。我如何在 C++ 中实现这一点?

另一方面,我将如何在 java 应用程序中将代表我的布尔值的 1 和 0 的字节解析为布尔值?我目前在我的 java 应用程序中使用 ByteBuffer。这与我想做的事情兼容吗?如果是,我该如何实现,如果不是,有什么替代解决方案?

【问题讨论】:

    标签: java c++ serialization deserialization


    【解决方案1】:

    如果您使用 char 来表示 8 个布尔值,那么您可以对您的角色执行 BITWISE AND (&) 并使用控制掩码来确定翻转了哪些位。

    例如:我有一个char八Bools = 'A'; //A是ascii 65 = 01000001b 如果我想检查最不重要的列,我可以用 00000001 按位 AND 八布尔值。

    结果

        010000001 //char 'a'
      & 000000001 //ascii [start-of-heading], or integer 1
     is 000000001. //equals 1.  You know this bit is flipped.
    

    您现在知道最低位被翻转了。相反,如果您想查看第二个 MOST 有效位是否被翻转,您可以使用该特定位进行翻转。

       010000001 //char 'a' or int 65
     & 010000000 //char '@' or int 64
    is 010000000 // equals 64.  Now you know this bit is flipped.
    

    使用此方法,您可以将一个字符用作 8 个布尔值的数组。

    【讨论】:

    • 如何有效地确定代表我的 8 个布尔值的字符?
    • @ping 你不一定要这样做。您可以使用位移操作来打包您的角色!只要每次都以相同的顺序将位移入字符中,就可以将它们以相反的顺序移出。
    猜你喜欢
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多