C#獲得多位元組任意連續位轉換為int的值
阿新 • • 發佈:2022-01-06
下位機常常返回一個或多個位元組,每個位元位都有其含義。連續幾位表示一個數值的情況經常出現,在此封裝一個幫助類,實現獲取任意連續位表示數值的值:
public static class BitHelper { //獲取位元組任意位的值 1 or 0 public static int GetBitByIndex(byte value, int index) { if (index > 7) { throw new Exception(); }BitHelperreturn (value & (0x1 << index)) >> index; } //獲取指定起點和終點連續位表示的int值, startIndex = 0, endIndex = values.Length * 8 - 1 public static int GetIntFromPart(byte[] values, int startIndex, int endIndex) { int result = 0; for (int i = startIndex; i <= endIndex; i++) {int n = values.Length - (i / 8) - 1; int p = i > 7 ? i % 8 : i; result += GetBitByIndex(values[n], p) << (i - startIndex); } return result; } }
其中位元組陣列{0xEF, 0x5F} 等價0xEF5F ,等價1110 1111 0101 1111 ,從左到右,由高到低。
由於使用int型別,擷取位長不應該超過31位。否則可能溢位。