1. 程式人生 > 其它 >C#獲得多位元組任意連續位轉換為int的值

C#獲得多位元組任意連續位轉換為int的值

下位機常常返回一個或多個位元組,每個位元位都有其含義。連續幾位表示一個數值的情況經常出現,在此封裝一個幫助類,實現獲取任意連續位表示數值的值:

    public static class BitHelper
    {
        //獲取位元組任意位的值 1 or 0
        public static int GetBitByIndex(byte value, int index)
        {
            if (index > 7)
            {
                throw new Exception();
            }
            
return (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; } }
BitHelper

其中位元組陣列{0xEF, 0x5F} 等價0xEF5F ,等價1110 1111 0101 1111 ,從左到右,由高到低。

由於使用int型別,擷取位長不應該超過31位。否則可能溢位。