对于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 编码,因此您的问题没有唯一的答案。
(和注释,这是必要的,你清楚地知道使用的编码摆在首位,以创建二进制数据,如果你希望能够成功读取也无妨)
- 1 回答
- 0 关注
- 264 浏览
添加回答
举报
0/150
提交
取消