在c ++中将bool序列化为单个位,并在java中反序列化为boolean

时间:2017-03-02 00:25:26

标签: java c++ serialization deserialization

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

另一方面,我将如何用1&#39解析字节,并将0代表我的bool代表java应用程序中的布尔值?我目前在我的java应用程序中使用ByteBuffer。这与我想做的兼容吗?如果是这样,我怎样才能实现这一点,如果没有,那么什么是替代解决方案呢?

1 个答案:

答案 0 :(得分:0)

如果使用字符来表示8个bool,则可以对字符和控制掩码执行BITWISE AND(&)以确定翻转了哪些位。

例如:我有一个char八字母=' A&#39 ;; // 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个bool的数组。