2017-03-02 69 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

相關問題