对于BinaryReader.ReadInt32()和BinaryReader.ReadSingle()净的文件说:
BinaryReader 以小端格式读取此数据类型。
所以我推断 BinaryReader 会以小端格式读取这些数据类型,即使我的计算机架构(由 验证BitConverter.isLittleEndian)是基于大端格式的。
但是对于BinaryReader.ReadChars()(returning Char[]) 和BinaryReader.PeekChar()(returning Int32) 没有关于字节顺序的说明。
现在我不确定这些方法是否根据计算机体系结构来解释字节,或者它们是否也基于小端。特别是我对BinaryReader.PeekChar()返回相同的数据类型如BinaryReader.ReadInt32(). 因此,此方法也以小端格式读取字节是有意义的。
想象一下这种情况:我的应用程序运行在基于大端的计算机体系结构上,并尝试读取基于大端的二进制文件。在这种情况下,我将不得不逆转字节顺序BinaryReader.ReadInt32()和BinaryReader.ReadSingle()(见下文代码)。但是我必须为BinaryReader.PeekChar()and做同样的事情BinaryReader.ReadChars()吗?不幸的是,我没有基于大端的计算机/操作系统。但是我的应用程序应该与这种架构兼容。
public class ReverseBinaryReader: BinaryReader
{
public ReverseBinaryReader(Stream stream, Encoding encoding) : base(stream, encoding) { }
public override int ReadInt32()
{
var data = base.ReadBytes(4);
Array.Reverse(data);
return BitConverter.ToInt32(data, 0);
}
public override float ReadSingle()
{
var data = base.ReadBytes(4);
Array.Reverse(data);
return BitConverter.ToSingle(data, 0);
}
}
慕容森
相关分类