我是C语言的初学者。
我正在尝试读取二进制txt文件。
当我直接打开txt文件时,我看到了它
- 젂8F? ?㎲잤öタSP쑴톧숴沛=)麴퓠5 R오쏠AD풠-V욕Ç珞|붆拂쟬v ????걀신v @n풶1C퓋>?!????2 P琏> 5쾳엥V壤뾅甲癣甲αW? 殆퀃[??픫퇡원퓅V맙°쐴??阁W¯¯条>有?????????걬벩3쁂횖升젖옜鹦d乍涌H 19伽ý뤍XK묠RT테 ?@숦?vY햙y?kz'?n?6注웍Qt ?? *풯?인$ ???쾹y옇왯?L쁂碻?祠녋Dm +작\薮왱여?픻9c욋??출풛궭母?좣?孔8퓎뒜C =瑾A ?? +샓?쇏岫岫岫j j풖풖풖풖앝앝앝????????????_ _ _ _? ????2及풰Еü윰我녉ü푂풧+쁂 - 晖甲伦겵헳퐉LG퓾닆욋ⓨ풇짡믳빢쨒榕:@뺠쏱요p殆쩋쁂中号됆A 10욢?????? ?돽p瑥푢
是的,txt文件中的内容似乎很奇怪,因为它呈现了二进制文件。
该文件由标题和数据组成。
标题是
nSamples - 文件中的样本数(4字节整数)
sampPeriod - 以100ns为单位的采样周期(4字节整数)
sampSize - 每个样本的字节数(2字节整数)
parmKind - 表示样本种类的代码(2字节整数)
和4byte float类型的数据部分。
我的代码在Header部分确实做得很好。
但我不知道为什么数据部分会变得更糟。
我的代码中的数据部分似乎有误,因为除了data [0]
之外,它们具有相同的值实际上,它们都有不同的价值。
#include <stdio.h>
#include <stdlib.h> // exit()
int main(void)
{
FILE *a;
int abc=1;
int ch;
int size;
int k;
float* data;
long* nSamples;
long* sampPeriod;
short* sampSize;
short* sampKind;
nSamples=(long*) malloc(sizeof(long));
sampPeriod=(long*) malloc(sizeof(long));
sampSize=(short*) malloc(sizeof(short));
sampKind=(short*) malloc(sizeof(short));
data=(float*) malloc(sizeof(float)*10);
//I Just wanted to check a few values
if ( (a = fopen("noalter.txt", "rb")) == NULL ) {
fputs("error!", stderr);
exit(1);
}
fread(nSamples,sizeof(long),1,a);
fread(sampPeriod,sizeof(long),1,a);
fread(sampSize,sizeof(short),1,a);
fread(sampKind,sizeof(short),1,a);
fread(data,sizeof(float),1,a);
fread(data,sizeof(float),1,a);
fread(data,sizeof(float),1,a);
printf("%ld \n",nSamples[0]);
printf("%ld \n",sampPeriod[0]);
printf("%d \n", sampSize[0]);
printf("%d \n", sampKind[0]);
printf("%f \n", data[0]);
printf("%f \n", data[1]);
printf("%f \n", data[2]); //I Just wanted to check a few values
fclose(a);
free(nSamples);
free(sampPeriod);
free(sampSize);
free(sampKind);
return 0;
}
答案 0 :(得分:3)
在阅读数据时,您会三次读取data
的相同位置。你应该这样做。
fread(&data[0], sizeof(data[0]), 1, a);
fread(&data[1], sizeof(data[1]), 1, a);
fread(&data[2], sizeof(data[2]), 1, a);
或者只阅读您分配的所有十个条目:
fread(data, sizeof(data[0]), 10, a);
答案 1 :(得分:0)
如果您使用Linux,也可以使用 cat 命令使用二进制文件的内容。