C++读取二进制文件有关问题
求助C++读取二进制文件问题
一个二进制文件.dat,里面有28个网格形式的数据(3600 X 1800),第2500-3150列、1000-1450行的数据有值,其余位置数值为0,如何读取第18-22个网格数据且按照原来的网格形式存储为文本,有代码和解释最佳,自己写的代码编译没问题可是运行不了,显示Stack overflow。。。
在此谢过了!
------解决方案--------------------
没实际编译链接调试,仅供参考:
一个二进制文件.dat,里面有28个网格形式的数据(3600 X 1800),第2500-3150列、1000-1450行的数据有值,其余位置数值为0,如何读取第18-22个网格数据且按照原来的网格形式存储为文本,有代码和解释最佳,自己写的代码编译没问题可是运行不了,显示Stack overflow。。。
在此谢过了!
------解决方案--------------------
没实际编译链接调试,仅供参考:
//二进制文件.dat,里面有28个网格形式的数据(7*450==3150 X 1800==4*450),
//第2500-3150列、1000-1450行的数据有值,
//其余位置数值为0,
//如何读取第18-22个网格数据且按照原来的网格形式存储为文本
#include <stdio.h>
#include <string.h>
#define RN 4
#define CN 7
#define RW 450
#define CW 450
FILE *f;
FILE *ft;
typedef unsigned char DT;
DT rd[CN*CW];
DT d;
int r,c,R,C,N;
int main() {
f=fopen("bin.dat","wb");
memset(rd,0,CN*CW*sizeof(DT));
for (r= 0;r<1000-1;r++) fwrite(rd,sizeof(DT),CN*CW,f);
memset(rd+2500*sizeof(DT),1,(3150-2500)*sizeof(DT));
for (r=1000-1;r<1450-1;r++) fwrite(rd,sizeof(DT),CN*CW,f);
memset(rd,0,CN*CW*sizeof(DT));
for (r=1450-1;r<1800 ;r++) fwrite(rd,sizeof(DT),CN*CW,f);
fclose(f);
f=fopen("bin.dat","rb");
ft=fopen("dat.txt","w");
for (r=0;r<RN*RW;r++) {
for (c=0;c<CN*CW;c++) {
R=r/RW;
C=c/CW;
N=R*CN+C;
if (18-1<=N && N<=22-1) {
fseek(f,(r*CN*CW+c)*sizeof(DT),SEEK_SET);
fread(&d,sizeof(DT),1,f);
fprintf(ft,"%d,",d);
} else fprintf(ft,"0,");
}
fprintf(ft,"\n");
}
fclose(ft);
fclose(f);
}