繁体   English   中英

在C ++中将布尔序列化为单个位,并在Java中反序列化为布尔值

[英]Serialize a bool into a single bit in c++ and unserialize into boolean in java

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

另一方面,如何将代表我的布尔值的1和0解析为Java应用程序中的布尔值? 我目前在Java应用程序中使用ByteBuffer。 这与我想做的兼容吗? 如果是这样,我该如何完成?如果没有,什么是替代解决方案?

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

例如:我有一个char fourBools ='A'; // A为ascii 65 = 01000001b如果我想检查最低有效列,则可以按位与AugustBools与00000001。

的结果

    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个布尔数组。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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