BinaryReader.ReadInt32期望数据采用 Little Endian 格式。您提供的数据采用 Big Endian。
这是一个示例程序,它显示了 BinaryWriter 如何将 Int32 写入内存的输出:
namespace Endian {
using System;
using System.IO;
static class Program {
static void Main() {
int a = 2051;
using (MemoryStream stream = new MemoryStream()) {
using (BinaryWriter writer = new BinaryWriter(stream)) {
writer.Write(a);
}
foreach (byte b in stream.ToArray()) {
Console.Write("{0:X2} ", b);
}
}
Console.WriteLine();
}
}
}
运行它会产生输出:
03 08 00 00
要在两者之间进行转换,您可以使用 读取四个字节BinaryReader.ReadBytes(4)
,反转数组,然后使用BitConverter.ToInt32
将其转换为可用的 int。
byte[] data = reader.ReadBytes(4);
Array.Reverse(data);
int result = BitConverter.ToInt32(data);