免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7005 | 回复: 4
打印 上一主题 下一主题

怎樣去讀取一個二進制文件內容? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-11-20 22:41 |只看该作者 |倒序浏览
請大牛給個思路吧`~
是不是讀二進制文件時,要一次讀八位才能轉換成一個字符呢?
謝謝了~~

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
2 [报告]
发表于 2005-11-20 22:43 |只看该作者
既然是二进制文件,
你还从里面读取什么字符呀?
要是想读取字符,
那就按文本文件方式打开读取。

论坛徽章:
0
3 [报告]
发表于 2005-11-20 22:49 |只看该作者
原帖由 lenovo 于 2005-11-20 22:43 发表
既然是二进制文件,
你还从里面读取什么字符呀?
要是想读取字符,
那就按文本文件方式打开读取。


可是我把整數寫進二進制文件裏面,還能讀出來
字符就不行的嗎?
文本方式不是只可以讀取文本文件的嗎?
THX

论坛徽章:
0
4 [报告]
发表于 2005-11-20 23:02 |只看该作者

  1. #define   MAX_LINE 80   

  2. typedef struct
  3. {
  4.     int id;
  5.     float x_coord;
  6.     float y_coord;
  7.     char name[MAX_LINE+1];
  8. } MY_TYPE_T;
复制代码


先说一下是怎么文件是如何进行存储的吧,这样才能理解需要如何读。
在32位系统上,int 类型占4个字节,float占4个字节,char类型占一个字节,上面定义的结构,总共占有的存储空间是sizeof(MY_TYPE_T)个字节,当然,这样考虑到字节对齐等因素。

那么它如何以二进制方式存储到磁盘上呢?可以这么说,存盘上存储的数据是内存里的数据的映射,是一一对应的。假定有一个整数255, 他的16进制形式是0xFF,在磁盘上他的存储形是就是连续的四个字节的存储空间,其值为255。具体的情况,你可以编程进行测试。给出下面一个例子,

  1. #include <stdio.h>
  2.   
  3. #define MAX_LINE    40
  4.   
  5. #define FILENAME "myfile.bin"
  6.   
  7. typedef struct
  8. {
  9.         int id;
  10.         float x_coord;
  11.         float y_coord;
  12.         char name[MAX_LINE+1];
  13. } MY_TYPE_T;

  14. #define MAX_OBJECTS    3

  15. MY_TYPE_T objects[MAX_OBJECTS]=
  16. {
  17.         { 0, 1.5, 8.4, "First-object" },
  18.         { 1, 9.2, 7.4, "Second-object" },
  19.         { 2, 4.1, 5.6, "Final-object" }
  20. };

  21. int main()
  22. {
  23.         int i;
  24.         FILE *fout;

  25. /* Open the output file */
  26.         fout = fopen( FILENAME, "wb" );
  27.         if (fout == (FILE *)0)
  28.                 exit(-1);

  29. /* Write out the entire object’s structure */
  30.         fwrite( (void *)objects, sizeof(MY_TYPE_T), 3, fout );

  31.         fclose( fout );

  32.         return 0;
  33. }
复制代码


然后,再以普通的ascii方式输出到一个文件,比较一下。在windows底下的话,可以用ultra edit,linux底下用hexdump hexedit都可以。看一下,二进制方式是如何存储的。

论坛徽章:
0
5 [报告]
发表于 2005-11-20 23:28 |只看该作者
好的`~
十分感謝~~~~  
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP