2017-03-02 92 views
0

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

在事情的另一方面,我将如何解析1和0代表我的布尔到Java应用程序中的布尔值的字节?我目前在我的Java应用程序中使用了一个ByteBuffer。这与我想要做什么兼容?如果是这样,我该如何做到这一点,如果没有,那么什么是替代解决方案?

回答

0

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

例如:我有一个char eightBools ='A'; // A为ASCII 65 = 01000001b 如果我要检查的至少显著列,我可以按位与eightBools与00000001

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

你现在知道了最低级位结果翻转。相反,如果你想看看第二个最重要的位是否翻转过来,你可以和它一起使用。

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

使用这种方法,可以利用一个字符作为8级的bool的阵列。

+0

我怎样才能有效地确定什么字符代表我的8个布尔人? – ping

+0

@平你不一定非得。您可以使用bitshift操作来打包角色!只要你每次把这些位按照相同的顺序转换成char,你就可以按照相反的顺序将它们移回去。 – JGroven