我已经为此编写了一个程序,仅当位数组长度为8的倍数时,位才有效。 有人可以帮助我将5位的位数组转换成字节
两个函数仅在位数为8的倍数时才起作用。
public static byte[] BitArrayToByteArray(BitArray bits)
{
byte[] ret = new byte[bits.Length / 8];
bits.CopyTo(ret, 0);
return ret;
}
public static byte[] ToByteArray(this BitArray bits)
{
int numBytes = bits.Count / 8;
if (bits.Count % 8 != 0) numBytes++;
byte[] bytes = new byte[numBytes];
int byteIndex = 0, bitIndex = 0;
for (int i = 0; i < bits.Count; i++)
{
if (bits[i])
bytes[byteIndex] |= (byte)(1 << (7 - bitIndex));
bitIndex++;
if (bitIndex == 8)
{
bitIndex = 0;
byteIndex++;
}
}
return bytes;
}
答案 0 :(得分:2)
基本上你需要对第一种方法中所需的字节数进行舍入:
byte[] ret = new byte[(bits.Length + 7) / 8];
bits.CopyTo(ret, 0);
乍一看你的第二种方法看起来还不错......它肯定会填充正确的字节数。它可能无法以您希望的方式填充它们,但在这种情况下,您需要提供有关您希望如何填充它的更多详细信息。例如,您可能只想更改bitIndex
的初始值。 (样本输入和输出非常有用。)