簡體   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