当位数组只有5位或6位时,如何将位数组转换为字节

时间:2014-03-28 17:50:23

标签: c# .net type-conversion byte bitarray

我已经为此编写了一个程序,仅当位数组长度为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;
        }

1 个答案:

答案 0 :(得分:2)

基本上你需要对第一种方法中所需的字节数进行舍入:

byte[] ret = new byte[(bits.Length + 7) / 8];
bits.CopyTo(ret, 0);

乍一看你的第二种方法看起来还不错......它肯定会填充正确的字节数。它可能无法以您希望的方式填充它们,但在这种情况下,您需要提供有关您希望如何填充它的更多详细信息。例如,您可能只想更改bitIndex的初始值。 (样本输入和输出非常有用。)