为了账号安全,请及时绑定邮箱和手机立即绑定

BinaryReader 是否以小端格式读取所有数据类型?

BinaryReader 是否以小端格式读取所有数据类型?

C#
jeck猫 2021-10-09 16:53:24
对于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);    }}
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

由于这些是基于字符的 API,它们的解释取决于所使用的编码。由于支持Little-endian 和 Big-endian UTF16 编码,因此您的问题没有唯一的答案。

(和注释,这是必要的,你清楚地知道使用的编码摆在首位,以创建二进制数据,如果你希望能够成功读取也无妨)


查看完整回答
反对 回复 2021-10-09
  • 1 回答
  • 0 关注
  • 264 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信