【发布时间】:2010-10-17 16:44:28
【问题描述】:
我有一个代表位的 128 个布尔值数组。如何将这些 128 位表示形式转换为 16 字节?
例子:
我有一个如下所示的数组:
0110001100110000100010111011001011010011010001010001101101001100
1000010000000000001000111111111101000011111001111011111011111001
(转换为 1 和 0 更简洁)
我需要将这些位转换为以下字节数组:
99 48 139 178 211 69 27 76 132 0 35 255 67 231 190 249
编辑:这似乎不起作用:
public byte[] ToByteArray() {
int numBytes = 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 << bitIndex);
bitIndex++;
if (bitIndex == 8) {
bitIndex = 0;
byteIndex++;
}
}
return bytes;
}
它输出:
198 12 209 77 203 162 216 50 33 0 196 255 194 231 125 159
【问题讨论】:
-
您可以使用模 (%) 运算符消除“byteIndex”变量。字节[bitIndex % 8]
-
@arul,我怀疑你在考虑整数除法。必须在分配的右侧使用模数。
bytes[bitIndex / 8] |= (byte)(1 << (bitIndex % 8))
标签: c# bit-manipulation byte