如何从字节获得子位作为单独的整数值

本文关键字:单独 整数 字节 | 更新日期: 2023-09-27 18:03:23

例如,我有byte = 245。我想从它得到任意数量的子位然后把它转换成整数。我怎么能做到呢?例如,我需要从2到5位的值,或者从0到2,5到7。

任何基于C语言的解决方案都可以。

目前我使用这个函数来获取单个比特:

public bool GetBitFromByte(byte b, byte bit_index_0_7)
{
    var bit = (b & (1 << bit_index_0_7)) != 0;
    return bit;
}

使用这个函数收集bool数组并将其传递给垃圾函数:

public static byte[] GetBytesFromBits(bool[] bits)
{
    int bits_amount = bits.Length;
    while (bits_amount % 8 > 0)
        bits_amount++;
    byte[] vals = new byte[bits_amount / 8];
    for (int i = 0; i < bits.Length; i += 8)
    {
        byte val = 0;
        for (int j = i; j < i + 8 && j < bits.Length; j++)
        {
            val <<= 1;
            if (bits[j]) val |= 1;
        }
        vals[i / 8] = val;
    }
    return vals;
}

这个函数逻辑很奇怪,我在寻找更清晰和原生的方式。

如何从字节获得子位作为单独的整数值

这叫做屏蔽。您指定位为2的幂(例如,在c++中,1<<i为位i),将这些相加形成掩码,然后在原始值和掩码上使用&