如何从字节中获取子位作为单独的整数值?
Posted
技术标签:
【中文标题】如何从字节中获取子位作为单独的整数值?【英文标题】:How to get subbits from byte as separate integer value? 【发布时间】:2016-08-21 18:31:12 【问题描述】:例如,我有 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 函数逻辑很奇怪,我正在寻找更清晰和原生的方式。
【问题讨论】:
您尝试了哪些方法,为什么不起作用?请举例说明输入、预期输出和实际输出。 @WeatherVane - 我发布了我目前拥有的内容。我正在寻找一种没有垃圾代码的更简单的方法。 抱歉,这不是 C 题。我很惊讶您代表的成员提出了如此微弱的问题和垃圾邮件标签。 在 C 中有效的内容也将在 C# 中有效。我需要任何解决方案。我什至可以在 C 上制作 DLL 并在 C# 下加载它。 它在 C 中不起作用。它不是 C 代码。 【参考方案1】:这称为掩蔽。您将位指定为 2 的幂(例如,在 C++ 中,1<<i
表示位 i
),将它们相加以形成掩码,然后在原始值和掩码上使用 &
。
【讨论】:
谢谢。会努力去做的。 例如:int result = input & ((1<<5) + (1<<4) + (1<<3) + (1<<2))
以上是关于如何从字节中获取子位作为单独的整数值?的主要内容,如果未能解决你的问题,请参考以下文章