默认情况下,BinaryWriter 类将 int 值写入左侧的低位(例如,当在十六进制编辑器中查看结果文件时, (int)6 变为 06 00 00 00)。我需要右边的低位(例如00 00 00 06)。
我如何实现这一目标?
编辑:感谢 strager 为我提供了我所寻找的名称。我已经编辑了标题和标签,以便更容易找到。
默认情况下,BinaryWriter 类将 int 值写入左侧的低位(例如,当在十六进制编辑器中查看结果文件时, (int)6 变为 06 00 00 00)。我需要右边的低位(例如00 00 00 06)。
我如何实现这一目标?
编辑:感谢 strager 为我提供了我所寻找的名称。我已经编辑了标题和标签,以便更容易找到。
Jon Skeet在这里有一个 EndianBitConverter应该可以完成这项工作。只需根据需要使用大/小端。或者,只需将数据移动几次;-p
int i = 6;
byte[] raw = new byte[4] {
(byte)(i >> 24), (byte)(i >> 16),
(byte)(i >> 8), (byte)(i)};
不是真正的内置方式,但您可以使用它:EndianBit*。感谢乔恩斯基特:P
您正在寻找更改字节顺序(又名字节顺序)。你想打印出big endian。不确定如何在 C# 中执行此操作,但您可以在将整数发送到 BinaryWritter 类之前交换整数中的字节。
您可以使用System.BitConverter.IsLittleEndian检查当前系统的字节序。我不确定 BinaryWriter 是否使用系统的字节序或小字节序来实现兼容性。
如果你决定使用内置的东西,System.Net.IPAddress.HostToNetworkOrder() 有很多重载。
这些将满足您的要求,因为“主机”顺序很可能总是小端,而“网络”顺序很可能是大端,这就是您想要的。
但是,如果您根本不做任何与网络有关的事情,那么使用这些有点技巧。
您还可以使用 BitConverter 获取字节数组,然后将其反转。就像是:
Byte[] bytes = BitConverter.GetBytes(number);
Array.Reverse(bytes);
// Then, to write the values you use
writer.Write(bytes);