如何从byte获取子位作为单独的整数值?

时间:2016-08-21 18:31:13

标签: c# c++ c byte bit

例如,我有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;
}

使用此函数,我收集bools数组并将其传递给此垃圾函数:

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;
}

Thins函数逻辑非常奇怪,我寻找更清晰和原生的方式。

1 个答案:

答案 0 :(得分:2)

这称为掩蔽。您将位指定为2的幂(例如,在C ++中,1<<i用于位i),将它们相加以形成掩码,然后对原始值和掩码使用&。 / p>