例如,我有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函数逻辑非常奇怪,我寻找更清晰和原生的方式。
答案 0 :(得分:2)
这称为掩蔽。您将位指定为2的幂(例如,在C ++中,1<<i
用于位i
),将它们相加以形成掩码,然后对原始值和掩码使用&
。 / p>