默认情况下,BinaryWriter类使用左侧的低位写入int值(例如,当在十六进制编辑器中查看结果文件时,(int)6变为06 00 00 00)。我需要右边的低位(例如00 00 00 06)。
我如何实现这一目标?
编辑:谢谢你让我知道我要找的名字。我编辑了标题和标签,以便于查找。
答案 0 :(得分:6)
Jon Skeet有一个应该完成工作的EndianBitConverter here。只需根据需要使用大/小端。或者,只需将数据移位几次;-p
int i = 6;
byte[] raw = new byte[4] {
(byte)(i >> 24), (byte)(i >> 16),
(byte)(i >> 8), (byte)(i)};
答案 1 :(得分:6)
不是真正的内置方式,但你可以使用它: EndianBit*。感谢Jon Skeet:P
答案 2 :(得分:2)
您希望更改Byte Order (aka Endianness)。您想打印 big endian 。不知道你在C#中如何做到这一点,但你可以在将它发送到BinaryWritter类之前交换整数。
您可以使用System.BitConverter.IsLittleEndian检查当前系统的字节顺序。我不确定BinaryWriter是否使用系统的endianness或little endian来兼容。
答案 3 :(得分:1)
如果您决定使用内置的东西,System.Net.IPAddress.HostToNetworkOrder()会有许多重载。
这些会做你想要的,因为“主机”订单绝对是小端的,并且“网络”订单是big-endian,这就是你想要的。
如果你没有做任何与网络有关的事情,那么就可以使用它们了。
答案 4 :(得分:1)
您也可以使用BitConverter获取字节数组,然后将其反转。类似的东西:
Byte[] bytes = BitConverter.GetBytes(number);
Array.Reverse(bytes);
// Then, to write the values you use
writer.Write(bytes);
答案 5 :(得分:0)
现在没有用,但我为BinaryReder / Writer创建了一个connect ticket来支持Bigendian。投票给它here。