C#中如何从byte值初始化BitArray以得到预期二进制位序列?
解决C#中从byte获取对应二进制位序列的问题
你用BitArray ba = new BitArray((byte)70);得到大量0的原因是:这个构造函数的参数是BitArray的长度,而非要转换的byte值。它会创建一个包含70个false(对应0)的BitArray,和你要的byte位转换完全无关。
最简转换方法
要把byte值的二进制位转成BitArray,需要用接收byte[]的构造函数:
byte value = 70; BitArray ba = new BitArray(new byte[] { value });
此时ba的长度是8,对应70的二进制位,但注意BitArray是按从最低位(LSB)到最高位(MSB)的顺序存储的。70的二进制是01000110(十进制70 = 64 + 4 + 2),所以ba的位序列是:{0, 1, 1, 0, 0, 0, 1, 0}
若需要从最高位到最低位的序列
如果你预期的是{0,1,1,1,0,0,0,0}(对应二进制01110000,即十进制112),或者只是想把BitArray的顺序反转成高位在前,可以直接调用Reverse()方法:
ba.Reverse();
反转后70对应的序列会变成{0, 1, 0, 0, 0, 1, 1, 0},和你预期的序列不符的话,需要确认你要转换的byte值是否正确——01110000对应的byte是112,而非70。
直接获取位序列的其他方式
如果不需要BitArray,只是想得到二进制位的列表,也可以用位运算直接遍历:
byte value = 70; List<bool> bits = new List<bool>(8); for (int i = 7; i >= 0; i--) { bits.Add((value & (1 << i)) != 0); } // bits结果是 {false, true, false, false, false, true, true, false},对应01000110的高位到低位顺序
内容的提问来源于stack exchange,提问作者zapdbf
相关产品推荐
相关产品推荐

