首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

BinaryReader读取4个字节,但没有得到预期的结果

当使用BinaryReader读取4个字节时,如果没有得到预期的结果,可能是因为数据的表示方式不同。BinaryReader是一个用于读取二进制数据的工具,它可以读取各种数据类型,如Int32、Float、Double等。以下是一些可能的原因和解决方案:

  1. 数据表示方式不同:如果数据是以Big-Endian格式存储的,而BinaryReader是以Little-Endian格式读取的,那么结果就会不正确。可以使用BinaryReader的ReadInt32方法,并传递一个布尔值参数来指定是否以Big-Endian格式读取数据。
  2. 数据对齐问题:如果数据没有按照预期的格式存储,那么BinaryReader可能无法正确读取数据。可以使用BinaryReader的Seek方法来移动到正确的位置,然后再尝试读取数据。
  3. 数据类型不匹配:如果数据类型不匹配,也会导致BinaryReader无法正确读取数据。可以使用BinaryReader的ReadBytes方法来读取原始字节数据,然后使用BitConverter类将字节数据转换为预期的数据类型。
  4. 数据被压缩或加密:如果数据被压缩或加密,那么BinaryReader无法直接读取数据。可以使用相应的解压缩或解密工具来解密数据,然后再使用BinaryReader读取数据。

总之,如果使用BinaryReader读取4个字节时没有得到预期的结果,需要检查数据的表示方式、对齐方式、数据类型和加密状态等因素,并采取相应的措施来解决问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【手记】注意BinaryWriter写string小坑——会在string前加上长度前缀length-prefixed

编码是97,所以我预期data只有1个元素且值为97,而实际上,data有两个元素,依次为1、97,显然97代表a,前面的1是什么鬼,再试其它字符串,仍然会在前面多出1个甚至多个字节,值也比较飘忽,总之就是...bw并没有老老实实地【只】写入string二进制,而是加了些料,这在严格要求字节正确场景会出问题,如http请求体,服务器会对这些多出来字节表示懵逼。...遂搜索一番,发现MSDN、stackoverflow早有提到,前面多出来字节实际上是表示string长度,叫长度前缀(length-prefixed),据SO某答主说法,这是供BinaryReader...所以如果流读取方不是BinaryReader,这些长度前缀就是多余甚至是有害,这种情况下就不能使用BinaryWriter.Write(string)方法,要写入干净string二进制,可以这样:...bw.Write(Encoding.UTF8.GetBytes("a"));//按需选用正确编码 即先用具体编码得到string字节组,再用BinaryWriter.Write(byte[])写入该字节

1.1K30

Stream 流操作

当从 Stream 派生时,如果有内部字节缓冲区,则强烈建议重写这些方法以访问内部缓冲区,这样性能将得到显著提高。...当使用字节数组时,虽然根据传递到构造函数中参数可能能够修改现有内容,既不能追加也不能收缩流。空内存流是可调整大小,而且可以向其写入和从中读取。...对stream而言仅表示到字节流这一个层面所以是没有也不需要编码方式(构造函数里也不会需要这样东西) 如果需要向流中写数据时则可能回涉及到编码(如果是二进制写入仍不需要) stream本身可以提供面向字节读写操作...\r\n”或“xxxxxxxxxxxx”这种尾部数据无论最后有没有\r\n ReadLine() 结果都是null StringReader 类 实现 TextReader ,使其从字符串读取。...类似的没有什么可以说可以直接看MSDN BinaryReader 类 用特定编码将基元数据类型读作二进制值。 直接查看源码 ?

97720
  • 3-6 读写二进制文件

    我们现在每个字符由一个或多个字节组成,每个字节都是用-128—127之间部分数值来表示,也就是说,-128——127之间还有一些数据没有对应任何字符任何字节。...3-4-1 二进制文件读取器/编写器介绍 在读写二进制文件时,需要研究读取器/编写器组是BinaryReader和BinaryWriter,它们都从System.Object直接派生。...建立读取器/编写器(BinaryReader和BinaryWriter)需要注意事项有两点: n要使用 BinaryReader 和 BinaryWriter 类 n这两个对象都需要在FileStream...ReadByte() 从当前流中读取下一个字节,并使流的当前位置提升1个字节。 ReadInt16() 从当前流中读取2字节有符号整数,并使流的当前位置提升2个字节。...ReadInt32() 从当前流中读取4字节有符号整数,并使流的当前位置提升4个字节。 ReadString() 从当前流中读取一个字符串。字符串有长度前缀,一次7位地被编码为整数。

    97910

    【深入浅出C#】章节 7: 文件和输入输出操作:处理文本和二进制数据

    这些类对于处理二进制数据非常有用,特别是在需要高效读写二进制格式数据场景,如存储和读取图像、音频、视频等文件。记得在使用完这些类后关闭它们,以确保文件资源得到释放。...2.3 读写基本数据类型和字节数组 当使用 BinaryReader 和 BinaryWriter 类读写基本数据类型和字节数组时,你可以使用它们提供不同方法来实现。...ArgumentException:提供文件路径无效或不符合预期格式时可能引发此异常。 OutOfMemoryException:在内存不足情况下尝试读取大文件时可能引发此异常。...如果异常没有被任何 catch 块捕获,它将会被传递给调用堆栈上上一层 try-catch 块,或者如果没有上一层 try-catch 块,程序将会崩溃。...批量处理:从输入文件中读取数据,进行批量处理后将结果写入输出文件。 网络通信:将数据写入文件以备发送,或从文件中读取接收到数据。 配置更新:下载远程配置文件,更新应用程序设置和行为。

    69880

    ☀️ 学会编程入门必备 C# 最基础知识介绍—— C# 高级文件操作(文本文件读写、二进制文件读写、Windows 文件系统操作)

    StreamReader 和 StreamWriter 类用于文本文件数据读写。这些类从抽象基类 Stream 继承,Stream 支持文件流字节读写。...下表列出了 StreamReader 类中一些常用方法: 如需查看完整方法列表,请访问微软 C# 文档。 ---- 实例 下面的实例演示了读取名为 Jamaica.txt 文件。...BinaryReader 和 BinaryWriter 类用于二进制文件读写。 ---- BinaryReaderBinaryReader 类用于从文件读取二进制数据。...一个 BinaryReader 对象通过向它构造函数传递 FileStream 对象而被创建。...下表列出了 BinaryReader 类中一些常用方法: 如需查看完整方法列表,请访问微软 C# 文档。

    1.1K30

    .NET斗鱼直播弹幕客户端(上)

    然后 C# 7.0发布了 ValueTask, ValueTask是值类型,因此在频繁调用异步操作(如使用 Stream读取字节)时,不会因为创建过多 Task而分配没必要内存。...这里,我确实是使用TCP连接流读取字节,是使用 ValueTask最佳时机。 这里我们将尝试将代码切换为 ValueTask版本。...首先第一个问题是 BinaryReader类,该类提供了便利字节操作方式,且能确保字节端为小端,该类不提供异步 API,因此需要作一些特殊处理: public static async Task<string...,如果一次无法读取所需字节数(4个字节), stream.ReadAsync()并不会堵塞线程。...注意:此处我没有使用 BitConverter.ToInt32(),也不能使用该方法,因为该方法不像 BinaryReader,它在大端/小端 CPU上会有不同行为。

    98320

    Android实现TCP断点上传,后台C#服务实现接收

    稳定性不能保证,一旦断开,无法续传。所以得采用另一种流行做法,TCP上传大文件。...在网络好情况下没什么问题,网络差点后来经常上传一半掉线或多个客户端上传出现连不上情况,对于大文件极不稳定,所以赶紧研发TCP协议文件断点上传。...bReader = new BinaryReader(fStream); //模拟断点上传,第一次只上传 100 个字节 long...现在主要讲讲客户端TCP上传,后台TCP接收,主要思路为:android端读取本地文件将文件名,文件大小上传至服务器(文件名必须是全局唯一),服务器将根据文件名查询是否上传过,若是上传过,将已传文件大小即断点位置传给终端...,终端接收后先保存断点位置,然后从断点位置读取文件断续上传,直到全部完成。

    1.1K90

    CefSharp请求资源拦截及自定义处理

    结合官方注释和调试结果,我们可以得出结论:要进行导航拦截,我们可以重写OnBeforeBrowse方法,要想进行资源拦截,我们需要实现自己ResourceRequestHandler。...如果响应数据长度是已知,可以直接设置responseLength长度为一个正数,然后ReadResponse(Read)将会一直调用,直到该Read方法返回false或者在已经读取数据字节长度达到了设置..._localResourceData = new byte[length]; // 读取文件中内容并保存到私有变量字节数组中 binaryReader.Read...每次在Read中进行读取时候,首先检查剩余待读取字节数this._localResourceData.LongLength - this....接下来我们开启资源拦截,再次加载页面,在加载过程中会有对应资源拦截时弹窗以及我们需要选择我们自定义资源文件: 完成处理后,得到如下显示页面: 源码 本Example源码已经开源在Github

    1.3K20

    消息服务框架使用案例之--大文件上传(断点续传)功能

    虽然可以使用FTP这样成熟稳定工具,客户表示不会使用FTP工具,并且我们产品也觉得客户从我们软件在切换到FTP用户体验不好,如果做成后台脚本调用FTP上传那么进度信息很难呈现到我们软件上。...= uploadInfo.Length) throw new Exception("网络异常:上传文件流数据块大小与预期不一致");...,第二个参数是提供给服务端回调方法(前面的base.CurrentContext.CallBackFunction方法)参数,第三个参数是服务回调方法结果。...其中,客户端读取文件方法 ReadFileData 实现如下: /// /// 读取文件返回字节流 /// ...,客户端根据服务端推送过来参数信息来精确读取服务端需要文件数据。

    2.1K50

    C#开发移动应用系列(4.调用系统应用,以及第三方应用(调用与被调用))

    webView.LoadUrl(data.GetStringExtra("code")); Toast.MakeText(this, "扫描结果...byte[] pReadByte = r.ReadBytes((int)r.BaseStream.Length); ShowMessage("读取到文件,字节长度:" +...(这是一个路径,但是不能直接拿来用) 2.将返回值转换成我们想要文件路径(重点~直接复制我代码就好了..) 3.通过文件流读取文件,并得到字节(和.NETIO操作一模一样) 这样,我们就完成了整个读取照片过程...类似这样 - - ,不知道讲清楚没有.. 我们上代码吧.. 我们首先新建一个APP项目如下: ? 然后在MainActivity编写意图过滤特性,如下: ?...,所以下面,我们讲如何得到其他应用发过来数据: App3中代码如下: if (Intent.ActionSend == action) { //得到发过来数据

    96570

    路径,文件,目录,IO常见操作汇总

    DriveInfo 类没有继承 FileSystemInfo 类,所以它也就没有上面提到那些通用属性了。    ... DriveInfo 则无需这么做,它属性每次都会读取文件系统最新信息。    ...在比较文件内容时候可以采用好几种方法。例如,检查文件某一特定部分是否一致;如果愿意,你甚至可以逐字节读取文件,逐字节进行比较。...Write方法总会将得到数据转换为文本,如果希望将这些文本转换回原来数据类型,应使用WriteLine方法,以确保每个值都处于单独一行上。    ... 块 ,接收数据 int bytesRead =  inputStream.EndRead(asyncResult); // 如果没有读取任何字节,则流已达文件结尾 if

    1.5K40

    C#百万对象序列化深度剖析:如何在网络传输中实现速度与体积完美平衡

    ,而不是先生成字符串然后再转换为字节,这对于一些需要将 JSON 数据写入文件或网络流场景非常有用,因为这些场景通常需要字节数据而不是字符串。...\ulong\double等) 2\2\4\4\8\8\8 基本数字类型是定长 string 4+n 用int类型4个字节表示字符串二进制后长度,n表示字符串二进制数组实际长度 T[]`List`...BinaryWriter\BinaryReader BinaryWriter 和 BinaryReader 类是用于以二进制格式写入和读取数据类。...它们分别提供了一系列方法来写入和读取各种基本数据类型(如int, float, double, string等)二进制表示。...自定义方式全手工操作,需要自己进行字节数组复制,各种转换,有点原始,使用BinaryWriter\BinaryReader进行序列化操作应该二进制序列化标准用法了。

    40010

    .NET Core.NET之Stream简介

    就是下面任意一点或两点: 一个源, 从它这里字节可以被顺序读取 一个目的地, 字节可以被连续写入. 程序员可以通过Stream类来发挥backing store作用....装饰时候接口(interface)并没有变化 可以在运行时进行装饰 可以串联装饰(先后进行多个装饰) backing store和装饰器stream都是按字节进行处理....该方法接受stream为参数, 返回一个线程安全包装结果. 这个包装结果在每次读, 写, 寻址时候会获得一个独立锁/排他锁, 所以同一时刻只有一个线程可以执行操作....由于BinaryReader可以读取字节数组, 所以可以把要读取内容转化成可寻址stream: byte[] data = new BinaryReader(s).ReadBytes((int)sbyte.Length...ZipFileOpen方法可以用来读写单独条目, 它会返回一个ZipArchive对象(你也可以通过使用Stream对象初始化ZipArchive对象得到).

    1.9K51

    【SQL】CLR聚合函数什么鬼

    ,跟聚合类实现没有关系。...什么意思,比如IsInvariantToNulls=true,是告诉SQL查询处理器,我这个聚合函数不管你字段中有没有null(指SQL中null,下同),返回结果都是一致,那么查询处理器可能就会根据这个来确定是否复用已存在执行计划...上面说过Accumulate是面向SQL入口,而Terminate就是出口了,聚合计算结果就是通过Terminate返回给调用者,所以该方法返回类型就是在SQL中得到类型。...三、最后 目前在我看来,聚合类它虽然在C#中是个类/结构,处处透着古怪,比如没有执行构造函数,运行期间又要清空类字段并转而采用序列化和反序列化方式传递状态,使它又不那么像一个正常类,所以我建议在完全弄清楚它之前...另外,对于文中提出疑惑,希望得到高手指教,再次谢过。

    75220

    【深入浅出C#】章节 7: 文件和输入输出操作:文件读写和流操作

    使用StreamReader类更简洁方便,它能自动处理字符编码问题,并且提供了更多读取方法。...在C#中,你可以使用BinaryReader和BinaryWriter类来处理二进制文件读取和写入。...解析二进制文件过程通常包括以下步骤: 打开二进制文件:使用C#BinaryReader类或其他合适类打开二进制文件,并准备进行读取操作。...这可能涉及到读取整数、浮点数、字符、字符串等不同类型数据。需要根据文件规范和格式来正确读取数据。 解析数据:读取数据后,根据文件规范和格式,将读取字节数据解析成具有实际意义信息。...序列化和反序列化:将对象序列化为字节流并保存到文件中,或从文件中读取字节流并反序列化为对象,是数据持久化和跨平台数据传输重要方式。

    2.7K50

    C# 一分钟浅谈:文件操作与文件流详解

    C# 提供了多种方式来处理文件和流,包括但不限于 System.IO 命名空间下类,如 FileStream, StreamReader, StreamWriter, BinaryReader, BinaryWriter...; fs.Write(info, 0, info.Length); } // 读取文件 using (StreamReader sr =...new StreamReader(filePath)) { String s = sr.ReadToEnd(); Console.WriteLine("读取内容...权限问题:没有足够权限去读写文件。文件被占用:文件正在被其他程序使用。如何避免:在操作文件前检查文件是否存在。检查是否有足够权限。尽量使用 using 语句确保文件正确关闭,防止资源泄露。...文件流操作文件流基本概念FileStream 是 System.IO 命名空间中一个类,用于创建或打开文件并提供对文件原始字节访问。它支持对文件读写操作。

    26730

    C# 基础知识系列- 14 IO篇 IO操作

    ,每次读取到一个字节数组里,然后将数据放到list集合里,在读取完成后关闭这个流。...虽然以上流并没有太多意义,但是基本演示了一下流读取操作。 注意到注释那行代码和上一行代码区别吗?...如果运行无误的话,将会得到一个”Program_01.cs“文件。 2. 使用流适配器 普通读取和写入都是使用字节数组,这在实际开发中非常不方便,所以C#又在流基础上开发了流适配器。...常用有哪些适配器流 1. BinaryReader 用特定编码将基元数据类型读作二进制值 2..../XmlWriter 对xml文件快速操作 这几个是出镜率较高仍有很多选手藏在幕后,并非是它们不出镜,而是它们经常活跃在特定领域里。

    1.6K10
    领券