我有以下代码,它完美地打印出二进制文件(打印前4个字符(我猜测每个字符2位,总共8个字符?
void myChunks(){
struct chunkStorage
{
long sxID;
char chunk[8]; // ‘Chunk of Data’
};
FILE *p;
struct chunkStorage d;
p=fopen("myfile.txt","rb");
while(1){
fread(&d.chunk,sizeof(d.chunk),1,p);
if(feof(p)!=0)
break;
printf(“%s”, d.chunk);
}
fclose(p);
}
myChunks();
因此,我能够获取数据的唯一方法似乎是以这种方式使用while循环。我想知道如何连接它,还有十六进制编码吗?
char chunk [8]有什么作用?为什么我必须遍历每8个字节?为什么我不能忘记"而#34;循环并只读取fopen语句后的完整块,然后将完整数据转换为十六进制?
连接,获取完整文件,或者这可能是错误的是正确的吗?
答案 0 :(得分:1)
我不确定此文件的历史记录,或者定义的结构的其他部分,但从严格的C
角度来看,该文件只是大量的8字节值,带有空值在他们中(或者printf
完全无效。)
是的,如果您的代码有效,则可以使用以下内容:
typedef struct justchunk { char chunk[8] ; } chunker ;
chunker * ptr ;
ptr= (chunker * ) malloc( 1000000 * sizeof( chunker ) ) ;
int iret ;
f= fopen( "myfile.txt", "rb") ;
iret= fread( ptr, sizeof( chunker), 1000000, f) ;
iret
中返回的值将是读取完整记录的数量。
错误处理,文件关闭作为练习留给读者。