【发布时间】:2014-05-08 07:57:42
【问题描述】:
我已经为此编写了一个程序,仅当位数组长度为 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 到 7,第二个字节表示位 8 到 15,依此类推。每个字节的 Least Significant Bit 表示最低索引值:“bytes [0] & 1”表示第 0 位,“bytes [0] & 2”表示第 1 位,“bytes [0] & 4”表示第 2 位,以及很快。 (来自:msdn.microsoft.com/en-us/library/x1xda43a.aspx)
标签: c# .net type-conversion byte bitarray