【发布时间】: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 代码。