CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

fread的一些用法存疑,百分

楼主Silenthunter(爱XX 爱XX)2006-07-03 01:58:41 在 C/C++ / C语言 提问

fread   把读出来的东西写进去缓冲区,如果缓冲区开辟的是char*     假设读出来的是"莙鈦"   我似乎不能用atoi得到它所对应的文件中的十六进制数(atoi的结果是0),为了能处理和识别"莙鈦"所对应的十六进制数c7   71   e2   81   我是不是只能定义unsigned   int*来存储文件中读出来的东西?   由于定义数字没有定义char[]这样灵活(char一个只占用1)当我fread的时候,似乎只能用许多占用4、5、6字节的文件中的数据装入int*   unsigned   long*等等之中,请问,用一个结构   把整个块的数据装进去是否会比许多fread   合力填充一个结构效率高呢?似乎肯定是后者效率高些  
   
  另外我这样的结构:The   CPIO   Header   uses   the   following   header   structure   (sometimes   referred   to   as   "new   ASCII"   or   "SVR4   cpio").   All   numbers   are   stored   as   ASCII   representations   of   their   hexadecimal   value   with   leading   zeros   as   needed   to   fill   the   field.   With   the   exception   of   c_namesize   and   the   corresponding   name   string,   and   c_checksum,   all   information   contained   in   the   CPIO   Header   is   also   represented   in   the   Header   Section.   The   values   in   in   the   CPIO   Header   must   match   the   values   contained   in   the   Header   Section.  
   
  struct   {  
                  char         c_magic[6];  
                  char         c_ino[8];  
                  char         c_mode[8];  
                  char         c_uid[8];  
                  char         c_gid[8];  
                  char         c_nlink[8];  
                  char         c_mtime[8];  
                  char         c_filesize[8];  
                  char         c_devmajor[8];  
                  char         c_devminor[8];  
                  char         c_rdevmajor[8];  
                  char         c_rdevminor[8];  
                  char         c_namesize[8];  
                  char         c_checksum[8];  
                  };  
  想要把             char         c_filesize[8],   char         c_namesize[8]   ,   char         c_checksum[8];等部分这样size的数据,按照文件中存储的十六进制数据及从文件便宜0x0处开始读取出来,填充入结构并且以16进制的形式处理,请问我该如何写fread()呢?(必要的话可以改动结构的定义,但是不能改动文件的定义和原定以结构体中每个成员的size和对应文件中的位置)  
   
  谢谢!!  
   
   
  问题点数:100、回复次数:8Top

1 楼du51(郁郁思扬)回复于 2006-07-03 02:24:25 得分 5

wchar_tTop

2 楼yingge(...木脑壳...)回复于 2006-07-03 04:39:01 得分 10

把这样c7   71   e2   81的数放到char[]里面,然后变成整数,为什么还要atoi啊,atoi是把字符串转换成整数啊。用memcpy就可以了  
   
  #include   <stdio.h>  
  #include   <string.h>  
   
  int   main(){  
  FILE   *fp;  
  char   s[4];  
  int   i,j;  
  fp=fopen("input.file","rb");  
  fread(s,4,1,fp);  
  fclose(fp);  
  fp=fopen("input.file","rb");  
  fread(&i,1,4,fp);  
  fclose(fp);  
  memcpy(&j,s,4);  
  if(i==j){  
  printf("Equals...\n");  
  }  
  return   0;  
  }  
  Top

3 楼Silenthunter(爱XX 爱XX)回复于 2006-07-05 12:01:32 得分 0

如果一个文件里面的待处理的一块的size比较大有11,这个表示了文件大小的数字,那么即使我能够用char[11]   把它读出来,又应该如何去处理这个数字呢?   谢谢!Top

4 楼wzzww(无知者无畏)(此人已死)回复于 2006-07-05 13:01:04 得分 0

你文件的内容是什么?  
   
  是0xc7   71   e2   81   吗?  
  0xc7   71   e2   81   不就是一个int吗?  
   
  弄不懂你的问题,帮不上忙Top

5 楼dreamXren(追梦人)回复于 2006-07-05 13:30:09 得分 0

lz描述问题都不清楚,汗~~~~  
   
  char   size[4];   //0xc7   71   e2   81  
  long     realsize   =   (long)*(long*)size;  
  要注意一般文件存放数据的都是按网络字节流顺序存放的(大端),  
  Intel处理器是小端,注意转序。  
   
  那么即使我能够用char[11]   把它读出来  
  ------------------------------------  
  这是什么文件,有这么大?size占4个字节,最大就是4G的文件。除非是BCD码Top

6 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-05 15:02:14 得分 15

如果缓冲区开辟的是char*     假设读出来的是"莙鈦"   我似乎不能用atoi得到它所对应的文件中的十六进制数(atoi的结果是0)    
  ================  
  atoi   要求参数是   ansi   字符串   ...  
   
  你的串显然不是,  
  自然不能的到正确的结果   ...  
   
  用   wchar_t   吧,支持   unicode   ...Top

7 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-05 15:08:04 得分 70

为了能处理和识别"莙鈦"所对应的十六进制数c7   71   e2   81   我是不是只能定义unsigned   int*来存储文件中读出来的东西  
  ============  
  这个看你怎么处理了,  
  也不是唯一的   ...  
   
  例如你定义若干个   char:  
        char   string[]   =   {0xc7,   0x71,   0xe2,   0x81,   0};  
        int   i;  
        puts(string);       //输出的是   莙鈦  
        for(i=0;   i<strlen(string);   i++)  
              printf("%x   ",   string[i]&0xff);     //输出   c7   71   e2   81   ,string[i]&0xff是控制位数  
  ...  
  Top

8 楼dreamXren(追梦人)回复于 2006-07-06 10:43:29 得分 0

lz你也太..................................毒了点吧!Top

相关问题

关键词

得分解答快速导航

  • 帖主:Silenthunter
  • du51
  • yingge
  • jixingzhong
  • jixingzhong

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo