如何从字节获得子位作为单独的整数值
本文关键字:单独 整数 字节 | 更新日期: 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
),将这些相加形成掩码,然后在原始值和掩码上使用&
。