如何使用右侧的低位写入文本文件(Bigendian)

时间:2008-12-18 22:31:46

标签: c# endianness

默认情况下,BinaryWriter类使用左侧的低位写入int值(例如,当在十六进制编辑器中查看结果文件时,(int)6变为06 00 00 00)。我需要右边的低位(例如00 00 00 06)。

我如何实现这一目标?

编辑:谢谢你让我知道我要找的名字。我编辑了标题和标签,以便于查找。

6 个答案:

答案 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