C# 位数组到字节[]转换后的字节顺序
我在,试图找出从BitArray到byte[]转换后的字节顺序 首先,这里是位数组的内容:C# 位数组到字节[]转换后的字节顺序,c#,arrays,byte,bit,bitarray,C#,Arrays,Byte,Bit,Bitarray,我在,试图找出从BitArray到byte[]转换后的字节顺序 首先,这里是位数组的内容: BitArray encoded = huffmanTree.Encode(input); foreach (bool bit in encoded) { Console.Write((bit ? 1 : 0)); } Console.WriteLine(); 输出: Encoded: 0000010
BitArray encoded = huffmanTree.Encode(input);
foreach (bool bit in encoded)
{
Console.Write((bit ? 1 : 0));
}
Console.WriteLine();
输出:
Encoded: 000001010110101011111111
A0-56-FF
好的,如果我们手动将这些二进制转换为十六进制,我们将得到:056a FF
然而,当我在C#中使用转换时,我得到的是:
BitArray encoded = huffmanTree.Encode(input);
byte[] bytes = new byte[encoded.Length / 8 + (encoded.Length % 8 == 0 ? 0 : 1)];
encoded.CopyTo(bytes, 0);
string StringByte = BitConverter.ToString(bytes);
Console.WriteLine(StringByte); // just to check the Hex
输出:
Encoded: 000001010110101011111111
A0-56-FF
不过,正如我刚才所说,应该是05 6A FF。请帮助我理解为什么会这样。当您对位进行访问时,可能会以LSB到MSB的方式返回位。查看A0,您将得到
1010 0000
,MSB位于左侧。但如果你把它反转,你会得到0000 0101
或05。十六进制6和F在反转时保持不变(但开关位于双十六进制)。我明白了。有什么方法可以使订单正确吗?这两个订单中哪一个是“正确的”?如果您想打印出右边有最低有效位的1和0,然后向后迭代位数组(即从最高索引、最高有效位开始,而不是最低索引位开始)。谢谢大家,现在已经清楚了!我可以请你帮我实施吗?一旦它被转换成字节,我想把它看作05 6A FF。对不起,如果我把你弄糊涂了,再次谢谢你。你确定吗?我认为你的“编码”输出更有可能被反转?