我试图使用print到文件中的特定位置并打印文本。但是,当我使用fputc或fwrite时,它们总是输入十六进制值,而不是char值。该文件是一个.dat,最初填充0。因此,除此之外,如果我试图写到某个地方,文件的其余部分就会被删除.我需要它保持不变,但这个新的文本覆盖了特定的位置。除此之外,为什么我的搜索一次移动两个字节而不是一个字节呢?代码:
    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。我也尝试过不同的价值观,而不是wb。我得到: 0000 63
因为它是一个.dat文件,所以它需要在十六进制中吗?这里的每0表示一个字节,对吗?如果一个字符占用一个字节,那么它不应该占据一个位置(假设不需要十六进制)吗?
编辑:我已经意识到,如果我猫它打印出来的字符。但这是否意味着每两个空格都被视为一个字节?
发布于 2014-05-04 20:47:36
0x64 = 'c‘= 99 (小数)。“字节”值是相同的,以不同的方式表示。
如果使用调试器查看文件的内容,调试器可能会以“十六进制”向您显示数据;在这种情况下,调试器将显示一对代表一个字节的十六进制数字。
(是的,‘在十六进制中,每一对字符都是一个字节。)
在C中,可以打印出以各种方式表示的字节值:
printf("%d", 0x63);  // will print out: 99
printf("%X", 0x63);  // will print out: 63
printf("%c", 0x63);  // will print out: cprintf("%d", 99);  // will print out: 99
printf("%X", 99);  // will print out: 63
printf("%c", 99);  // will print out: cprintf("%d", 'c');  // will print out: 99
printf("%X", 'c');  // will print out: 63
printf("%c", 'c');  // will print out: chttps://stackoverflow.com/questions/23460971
复制相似问题