如何将整数写入文本文件并使低位位于右侧(大端序)?

3
默认情况下,BinaryWriter类使用左侧的低位写入int值(例如,(int)6在十六进制编辑器中查看结果文件时变为06 00 00 00)。我需要右侧的低位(例如,00 00 00 06)。
我该如何实现这一点?
编辑:感谢strager为我提供了我要寻找的名称。我已编辑标题和标签以便更容易找到。
6个回答

6

虽然没有内置的方法,但是你可以使用这个工具:EndianBit*。感谢Jon Skeet :P


在几秒钟内同时发生了,抱歉。不过我会给你点赞的 ;-p - Marc Gravell

6

Jon Skeet有一个EndianBitConverter 在这里可以完成这项工作。只需根据需要使用big/little endian即可。或者,只需将数据移位几次 ;-p

        int i = 6;
        byte[] raw = new byte[4] {
            (byte)(i >> 24), (byte)(i >> 16),
            (byte)(i >> 8), (byte)(i)};

2
你想要更改字节顺序(也称为字节序)。你想要打印出大端序。不确定如何在C#中实现,但是可以在将整数发送到BinaryWritter类之前交换字节。
你可以使用System.BitConverter.IsLittleEndian检查当前系统的字节序。我不确定BinaryWriter是否使用系统的字节序或小端序以实现兼容性。

1
如果您决定使用内置的东西,那么 System.Net.IPAddress.HostToNetworkOrder() 有许多重载。这些将会做你想要的事情,因为“主机”顺序很可能总是小端,而“网络”顺序是大端,这正是你想要的。
但是,如果您与网络无关,则使用这些有点不太合适。

1

你也可以使用BitConverter获取一个字节数组,然后将其反转。类似这样:

Byte[] bytes = BitConverter.GetBytes(number);
Array.Reverse(bytes);

// Then, to write the values you use
writer.Write(bytes);

0

现在可能没什么帮助,但我已经为BinaryReder/Writer创建了一个连接票,以支持Bigendian的开箱即用。请在这里投票。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接