BinaryReader ReadInt32() 返回的数字太大

标签 binaryreader

它从小于 2k 的 .eml 文件读取。 你猜怎么了? msgCount是1717924456为什么ReadInt32返回这么大?

         protected void Load( Stream msgStream )
    {
        if( msgStream == null )
            throw new ArgumentNullException( "messageStream" );
        BinaryReader bsr = new BinaryReader( msgStream );
        MailAddress  = bsr.ReadString();
        MailUser     = bsr.ReadString();
        MailServer   = bsr.ReadString();
        UseSsl       = bsr.ReadBoolean();
        MailPort     = bsr.ReadInt32();
        MailPassword = bsr.ReadString();
        int i, msgCount = bsr.ReadInt32();
        for( i = 0; i < msgCount; i++ )
        {
            int msgLen = bsr.ReadInt32();
            MessageExt msg = new MessageExt( bsr.ReadBytes( msgLen ) );
            msg.RecvTime = DateTime.FromBinary( bsr.ReadInt64() );

这段代码以前可以工作,但现在看起来很奇怪,似乎我更改了一些导致此类异常的设置?

最佳答案

1717924456 == 0x66657268 看起来很像英文字符的 ASCII 十六进制代码。

假设是小端处理器,它对应于字符串“href”(0x68、0x72、0x65、0x66)。因此,您可能从错误的地址(即消息正文)阅读。

使用十六进制编辑器手动验证文件的内容并确保其未损坏。

关于BinaryReader ReadInt32() 返回的数字太大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25736222/

相关文章:

c - 在C中编辑或删除PDF标题信息

c# - 为什么代码分析告诉我,这里是 "Do not dispose objects multiple times":

c# - 在 C# 中的 UploadedFile 上使用 BinaryReader 的空数组

c# - 通过 BinaryReader 从 NetStream 读取的正确方法是什么?

C#处理二进制文件、多线程处理

c# - 如何将字节数组转换为字符串

c++ - 使用 std::stringstream 读取/写入无符号字节

c# - BinaryWriter 问题 - "code adds some byte between Write() method"

c# - 如何在 C# 中读取二进制文件?

C# BinaryReader.Read() 开始变得垃圾