我正在尝试使用fseek转到文件中的特定位置并打印文本。但是当我使用fputc或fwrite时,他们继续输入Hex值而不是char值。该文件是.dat,最初填充0。所以除了这个,如果我尝试写一些文件的其余部分被删除....我需要它保持相同,但这个新文本覆盖该特定位置。除此之外,为什么我的fseek一次移动2个字节而不是1个?代码:
FILE * pF;
pF = fopen( "/home/caleb/Documents/PA3/dssoo_p3_material_v2/disk.dat" , "wb" );
fseek (pF, 4, SEEK_SET);
char c='c';
fputc(c, pF);
//char buffer[] = { 'x' , 'y' , 'z' };
//fwrite (buffer , sizeof(char), sizeof(buffer), pF);
fclose (pF);
请注意,fwrite在这里被注释掉了。在fopen中我也尝试过除wb之外的其他值。 我得到:0000 0000 63
由于它是.dat文件,是否需要使用Hex格式?这里每0表示一个字节是否正确?如果一个字符占用一个字节不应该占用一个点(假设不需要Hex)?
编辑:我已经意识到,如果我把它打印出字符。但这是否意味着每两个空格被视为一个字节?答案 0 :(得分:1)
0x64 =' c' = 99(十进制)。 '字节'价值是相同的,以不同的方式表示。
如果使用调试器查看文件的内容,调试器可能会在< Hex;&#39 ;;在这种情况下,它会显示一对代表一个字节的十六进制数字。
(是的,'十六进制,每对字符都是一个字节。)
在C中,您可以打印出以各种方式表示的字节值:
printf("%d", 0x63); // will print out: 99
printf("%X", 0x63); // will print out: 63
printf("%c", 0x63); // will print out: c
printf("%d", 99); // will print out: 99
printf("%X", 99); // will print out: 63
printf("%c", 99); // will print out: c
printf("%d", 'c'); // will print out: 99
printf("%X", 'c'); // will print out: 63
printf("%c", 'c'); // will print out: c