关于2进制文件的问题?(请用C代码示例)

lifei 2000-03-20 01:48:00
有文件如下:
文件头为TEXT格式: ............................(128个字符)
数据为2进制 :................................(共521*521)(一个字节为一数据)
要求每次读一个字节的数据存放在数组中

文件如下:
<头文件> diamond 13 0年3月15日23时红外云图 0 3 15 23 512 511 86.24 -1.39 1 1 1 ir.dat cloud <后为数据> bccccccccccbbbcccccbbabbbbcddcccdefgedcddcbbcbaaccbccfhkmiihiilmkkjlopmsrs uvyxy倖噥倓噯厖墡唸寚噷彂崗拝€zuz厪媴悑厡嫋巿惉阜灆{zyuz{亽彆棎悓 and vv and ~~ and {}}~zz€倐儊厐~倠憱灐#ア泿悜敄€亣晠~zwqkt{y{vsnot and 厧?噷 and }uzmlihjl and 剢ts~{ntw}yywuw€帗灕┐航牌牌缮掏屯耸噬拍牌撬舷舷嗡躺淌汕侍掏挝以哉..............

...全文
194 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunsetyang 2000-03-22
  • 打赏
  • 举报
回复
不知道这位同志需要做怎样的处理,要开这种缓冲区。如果单纯的考虑实现的话,只需一下代码即可实现:
char head[128],buf[521];
FILE *fp=fopen("your_file_name.ext","rb");
int n;
fread(head,1,128,fp);//对于head的处理,如果你需要按字符串方式显示的话,请多分配一个字节,以添入NULL,如果无需显示自己案子段处理的话,128个就够了。
do{
n=fread(buf,1,521,fp);
//Process Data ...
//这里面写入你对数据的处理过程
}while(n>0);
fclose(fp);
RealTop 2000-03-22
  • 打赏
  • 举报
回复
提供一个函数,如果需要更复杂的功能或需要
用WinAPI实现,给我发邮件。
在BC31和VC50下调试通过,

#include <io.h>
#include <fcntl.h>
#include <dos.h>

char DataHead[128+1];
char DataArray[521][521];
// return 0:success
// -1:fail
int ReadData(char *filename)
{
int handle,i;

handle = _open(filename,O_RDONLY);
if (handle!=-1)
{
_read(handle,DataHead,128);
for (i=0;i<521;i++)
{
_read(handle,DataArray[i],521);
}
_close(handle);
handle = 0;
}
return handle;
}
csdn2000 2000-03-22
  • 打赏
  • 举报
回复
要点:
二进制方式打开文件;
字符串数组;
fseek()/fread()的使用.
solomon 2000-03-20
  • 打赏
  • 举报
回复
NO 应该是 fileHead[128]='\0';
C 语言 是从 0 开始的 0-127 一共128个字符
最好用
FILE* hfile = fopen("youfilename","rb")
打开文件
lifei 2000-03-20
  • 打赏
  • 举报
回复
softdoctor:
thank you 你说fileHead 最后加'\0';
fileHead[128]='\0';
该是fileHead[129]='\0';吧?

softdoctor 2000-03-20
  • 打赏
  • 举报
回复
fileHead 最后加'\0';
fileHead[128]='\0';
softdoctor 2000-03-20
  • 打赏
  • 举报
回复
FILE* hfile = fopen("youfilename","r")
char fileHead[129];
fread(fileHead,1,128,hfile);
BYTE byData[521][521];
int iRow = 0,iCol=0;

// 假如一个字节一个字节读
// 这样效率太低
while(fread(byData+iRow*521+iCol,1,1,hfile))
{
iCol++;
if(iCol>520)
{
iCol=0;
iRow++;
if(iRow>520)
break;
}
}
fclose(hfile);
//可一次读出,效率高很多
fread(byData,1,520*520,hfile)
fclose(hfile)
sodawater 2000-03-20
  • 打赏
  • 举报
回复
你的意思是什么?只是读文件吗?
你可以用FOPEN函数打开文件移动文件指针到128个字节以后
然后用一个循环读数据和处理数据,FREAD()函数读,就可以了

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧