簡體   English   中英

來自側面字節數組的位信息

[英]Bit information from side byte array

我正在嘗試根據似乎正在處理的項目的似乎API文檔讀取存儲在字節數組中的數據。 我習慣於處理字節數組,但是我不確定如何查看或了解字節中的位。

此圖像來自文檔中的頁面 在此處輸入圖片說明

它指出,“ IIN”值的長度為24位,從2號字節的7位字節開始,到4號字節和0位字節結束。如何選擇此數據並將其存儲在變量中? 以下擴展方法可以實現嗎?

        public static int GetSubBitsValue(this byte[] all, int startbyte, int startbit, int endbyte, int endbit)
    {
        //magic here
    }

一個字節包含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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM