3

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

我如何实现这一目标?

编辑:感谢 strager 为我提供了我所寻找的名称。我已经编辑了标题和标签,以便更容易找到。

4

6 回答 6

6

Jon Skeet在这里有一个 EndianBitConverter应该可以完成这项工作。只需根据需要使用大/小端。或者,只需将数据移动几次;-p

        int i = 6;
        byte[] raw = new byte[4] {
            (byte)(i >> 24), (byte)(i >> 16),
            (byte)(i >> 8), (byte)(i)};
于 2008-12-18T22:40:21.093 回答
6

不是真正的内置方式,但您可以使用它:EndianBit*。感谢乔恩斯基特:P

于 2008-12-18T22:40:54.807 回答
2

您正在寻找更改字节顺序(又名字节顺序)。你想打印出big endian。不确定如何在 C# 中执行此操作,但您可以在将整数发送到 BinaryWritter 类之前交换整数中的字节。

您可以使用System.BitConverter.IsLittleEndian检查当前系统的字节序。我不确定 BinaryWriter 是否使用系统的字节序或小字节序来实现兼容性。

于 2008-12-18T22:33:32.763 回答
1

如果你决定使用内置的东西,System.Net.IPAddress.HostToNetworkOrder() 有很多重载。

这些将满足您的要求,因为“主机”顺序很可能总是小端,而“网络”顺序很可能是大端,这就是您想要的。

但是,如果您根本不做任何与网络有关的事情,那么使用这些有点技巧。

于 2008-12-18T23:15:34.907 回答
1

您还可以使用 BitConverter 获取字节数组,然后将其反转。就像是:

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

// Then, to write the values you use
writer.Write(bytes);
于 2008-12-19T00:59:08.647 回答
0

现在它无济于事,但我为 BinaryReder/Writer 创建了一个连接票证,以支持 Bigendian。去这里投票吧。

于 2009-08-25T13:24:33.990 回答