`
isiqi
  • 浏览: 16073495 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

未知长度二进制流的读取

 
阅读更多

采用第三方工具处理网络流的时候,会面临一些问题,归纳如下:

1、二进制流的打开

很简单,使用popen、pclose即可。Windows平台下则采用_popen, _pclose。头文件都是stdio.h

例如:

2、二进制流的读取

依然很简单,使用大家都不陌生的fread就行啦~ 不过,这里有个trick:

fread的函数原型为:

这里,网友提供了一个很好的方法,并且进行了初步的评测:


"这个问题解决了,我将fread中第二个参数和第三个参数交换了以下位置,既:nReturn = fread(buf,1,1024,file); 这样,读取元素的长度为1字节,读取1024个元素,这样nReturn的值便是实际读取的字节数。这个想法受益于一个网友的帖子,提醒了我。
我测试过了,nReturn = fread(buf,1,1024,file)与nReturn = fread(buf,1024,1,file);在操在27087718字节长的二进制文件时,测试了150次,程序运行效率基本相同,前者比后者平均节省时间大约2ms。 "

通常我总是让nitem=1,所以返回值总是0或者1。为了获得真正读入的字节数,可以让block_len总是为1,nitem为期望读入的字节数。好方法!关于性能,可以再亲自测试一下。


3、获取二进制流的长度

基于2中的讨论,很容易获得二进制长度,例如:

4、如何探测文件流结束

如3中所示,调用函数feof()咯~

以一个例子总结一下,该例子利用curl来读取baidu首页的二进制流并以1024字节为单位逐次打印到屏幕上:

分享到:
评论

相关推荐

    C语言二进制文件处理

    然后你的问题中说每次读取两个字节,但是每个ASCII码的值只是用一个字节来表示的,所以我一个字节一个字节地读取,一次循环中读取两次,但是文件的长度是未知的,可能读取完一个字节之后就到文件末尾了,再读的话就...

    未知格式文件头的确定

    有一个二进制文件,具体格式未知。但知道它由两部分组成:1.文件头,2.数据块。其中文件头长度不可能超过256个字节。而数据块部分全部是单精度浮点数,数值精度0.01,数值范围-100.00~100.00,但是数据块尾部有部分...

    kiwi:基于模式的二进制格式,用于有效地编码数据树

    猕猴桃消息格式Kiwi是一种基于模式的二进制格式,用于有效地编码数据树。 它的灵感来自Google的格式,但更简单,编码更紧凑,并且对可选字段的支持更好。 目标: 常用值的有效编码:可变长度编码用于数字值,其中较...

    大智慧股票本地数据读取接口(含源码)

    若为值n,则除了读取Report.dat外还将读取(n-1)个最新.PRP历史分笔成交数据文件*/ %let HqmbFilesToRead=2; /*请确认要转换的数据,在下面语句的%后加*变为注释取消转换*/ /*沪市*/ %FxjData2FinData(sh,dm,FinData);...

    MCUTool.exe 源代码

    二进制比较,主要用于产品首件确认时,源hex文件与从产品中读出的文件进行比较。(注意未用字节的填充值如果不同,将会认为有差别) 5. 串口调试器 可以通过串口接收/发送数据,作为普通的串口调试器,可以手动...

    超级单片机开发工具v

    通讯时可以选择二进制、文本方式显示;可设置自动滚屏;设置最大显示行数; 可以选择多命令交互方式通讯,且可以作为主发方、从发方;主发时可以循环发送所选命令;从发时可以定义自动应答命令,即接收到表中所列...

    你必须知道的495个C语言问题

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 2.15 如何确定域在结构中的字节偏移...

    flex3的cookbook书籍完整版dpf(包含目录)

    通过二进制Socket发送和接收二进制数据 18.14节. XMLSocket通信 第十九章. XML(607) 19.1节. 加载一个XML文件 19.2节. 通过E4X语法遍历XML文档 19.3节. 使用正则表达式在E4X中进行查询 19.4节. 添加一个XMLList到...

    《你必须知道的495个C语言问题》

    这导致空间浪费而且无法与外部数据文件进行“二进制”读写。能否关掉填充,或者控制结构域的对齐方式? 27  2.14 为什么sizeof返回的值大于结构大小的期望值,是不是尾部有填充? 28 2.15 如何确定域在结构中的...

    C语言FAQ 常见问题列表

    o 3.10 我的编译器在结构中留下了空洞, 这导致空间浪费而且无法与外部数据文件进行 "二进制" 读写。能否关掉填充, 或者控制结构域的对齐方式? o 3.11 为什么 sizeof 返回的值大于结构的期望值, 是不是尾部有填充? ...

    精易模块[源码] V5.15

    4、修正“IP_10进制转IP”与“IP_16进制转IP”命令反向的问题,感谢易友[@humanbean ]反馈。 5、改善“网页_访问”死循环代码,感谢易友[@67564226]反馈。 6、优化“文本_取随机数字”精简代码,提高执行效率,感谢...

    精易官方免费模块v3.60版

    1.完善 “进制_十到二” 取消长度不足8位自动会补零,请根据需要补零 感谢 小爬虫 的提醒 2.完善 类_ODBC数据库,“读文本”参数二的备注,改为 索引从0开始 感谢 阿蒙 的提醒 3.完善 类_ODBC数据库 ,“连接Access...

    你必须知道的495个C语言问题(PDF)

    部数据文件进行”二进制” 读写。能否关掉填充, 或者控制结构域 的对齐方式? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.11 为什么sizeof 返回的值大于结构的期望值, 是不是尾部有填充? . . ...

    java-servlet-api.doc

    Servlet引擎载入Servlet后,Servlet引擎必须对Servlet进行初始化,在这一过程中,你可以读取一些固定存储的数据、初始化JDBC的连接以及建立与其他资源的连接。 在初始化过程中,javax.servlet.Servlet接口的init()...

    windows实用dos命令大全

    一)MD——建立子目录 1.功能:创建新的子目录  2.类型:内部命令  3.格式:MD[盘符:][路径名]〈子目录名〉  ...(2)选用/B参数,为二进制比较模式;  (3)选用/C参数,将大小写字符看成...

Global site tag (gtag.js) - Google Analytics