[英]Bit information from side byte array
一個字節包含8位。 位以2的冪進行編號,因此它們從7到0從最高有效位到最低有效位。 從而:
byte myByte = SomeFunctionToGetAByte();
bool isBit7Set = myByte & (2 ^ 7);
bool isBit6Set = myByte & (2 ^ 6);
bool isBit5Set = myByte & (2 ^ 5);
bool isBit4Set = myByte & (2 ^ 4);
bool isBit3Set = myByte & (2 ^ 3);
bool isBit2Set = myByte & (2 ^ 2);
bool isBit1Set = myByte & (2 ^ 1);
bool isBit0Set = myByte & (2 ^ 0);
由於此值從第7位開始,到第0位結束,因此它恰好落在字節邊界上,因此應該很容易獲得。
由於它是24位長,因此您將需要讀取3個字節(24位÷8個字節/字節= 3個字節)。 但是您需要知道字節的順序-首先是最高有效數字,這是您手工編寫的方式,在Mac / 68000體系結構中很常見; 或最低的最低有效數字在前,這在Wintel架構上很常見。 文檔必須告訴您這一點。
假設您在一個數組中有完整的字節數組。
byte[] bytes = GetByteArray();
您需要獲取所有三個字節,將其中一個字節向左移8位(或乘以2 ^ 8或256),再向左移位16位(乘以2 ^ 16或65536),然后將所有三個字節相加(或或它們,將得到相同的結果)。
如果格式為Big Endian (MSB在前),則值為
int value = bytes[2] << 16 | bytes[3] << 8 | bytes[4];
如果是小端(首先是LSB),則為:
int value = bytes[4] << 16 | bytes[3] << 8 | bytes[2];
選擇字節后,我將使用以下內容:
bool myBit = (inputByte & (2 ^ 7)) == (2 ^ 7);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.