【发布时间】:2016-11-19 10:25:54
【问题描述】:
我在一个文件中(使用'fwrite()')写了以下内容:
TUS�ABQ���������������(A����������(A��B������(A��B���A��(A��B���A������B���A������0����A������0�ABQ�������0�ABQ�����LAS����������������A�����������A��&B�������A��&B��B���A��&B��B������&B��
B����153���B����153�LAS�����153�LAS�����LAX���������������:A����������:AUUB������:AUUB��B��:
AUUB��B����UUB��B����������B��������LAX���������LAX�����MDW���������������A����������A��(�������A��(����A��A��(����A������(����A����A�89���A����A�89MDW�����A�89MDW�����OAK���������
����������������������@�����������@�����������@�����������@�������������������������OAK���������OAK�����SAN���������������LA����������LA��P@������LA��P@��@A��LA��P@��@A������P@��@A����������@A��������SAN���������SAN�����TPA�ABQ����������������B�����������B��@�����...(continues)
翻译成这样:
TUSLWD2.103.47.775.1904.06.40.03AMBRFD4.63.228.935.0043.09.113.0ASDGHU5.226.47.78.3.26...(The same structure)
而 hexdump 将是:
00000000 54 55 53 00 41 42 51 00 00 00 00 00 00 00 00 00 |TUS.ABQ.........|
00000010 00 00 00 00 00 00 28 41 00 00 0e 42 00 00 f8 41 |......(A...B...A|
00000020 00 00 00 00 4c 41 53 00 00 00 00 00 00 00 00 00 |....LAS.........|
00000030 00 00 00 00 00 00 88 41 00 00 26 42 9a 99 11 42 |.......A..&B...B|
(Continues...)
结构总是 2 个单词,每个单词 3 个字符(即 TUS 和 LWD),后跟 7 个浮点数,然后在文件结束时再次重复。
关键是:我只想读取分隔的每个字段,例如“TUS”、“LWD”、“2.10”、“3.4”、“7.77”...
而我只能使用 'fread()' 来实现这一点!现在,我正在尝试这个:
aux2 = 0;
fseek(fp, SEEK_SET, 0);
fileSize = 0;
while (!feof(fp) && aux<=2) {
fread(buffer, sizeof(char)*4, 1, fp);
printf("%s", buffer);
fread(buffer, sizeof(char)*4, 1, fp);
printf("%s", buffer);
for(i=0; i<7; i++){
fread(&delay, sizeof(float), 1, fp);
printf("%f", delay);
}
printf("\n");
aux++;
fseek(fp,sizeof(char)*7+sizeof(float)*7,SEEK_SET);
aux2+=36;
}
我得到了这个结果:
TUSABQ0.0000000.0000000.00000010.5000000.0000000.00000010.500000
AB0.0000000.000000-10384675421112248092159136000638976.0000000.0000000.000000-10384675421112248092159136000638976.0000000.000000
AB0.0000000.000000-10384675421112248092159136000638976.0000000.0000000.000000-10384675421112248092159136000638976.0000000.000000
但它不能正常工作......
*注意:忘记最后一个'fseek()'的参数,因为我一直在尝试太多无意义的事情! 要将单词(即 TUS)写入文件,我使用以下命令:
fwrite(x->data->key, 4, sizeof(char), fp);
要写浮点数,这个:
for (i = 0; i < 7; i++) {
fwrite(¤t->data->retrasos[i], sizeof(float), sizeof(float), fp);
}
【问题讨论】:
-
“三个字符的单词”:为什么
...*4 ...。它应该是fread(buffer, sizeof(char)*3 ...甚至“更好”的fread(buffer, sizeof(char), 3, ... -
因为当我将它们存储在文件中时,每个都有一个结尾 '\0' 字符,所以我正在尝试将其读回@alk
-
从您显示的转储 (
TUSABQ...) 看来,尾部的\0'似乎没有写入文件。也许向我们展示由适当的转储工具(如hexdump)生成的文件的clean hex-dump。 -
好的,所以您可能还想展示用于编写文件的代码。
-
为了调试起见,将此
printf("%s", buffer);基于行:printf("%s\n", buffer);或指示每个块读取如下printf("'%s'", buffer);
标签: c binaryfiles fread fseek