gpt4 book ai didi

c - 为什么我的 fputc/fwrite 一直以十六进制打印以及如何打印到文件的中间?

转载 作者:行者123 更新时间:2023-11-30 15:34:03 28 4
gpt4 key购买 nike

我正在尝试使用 fseek 转到文件中的特定位置并打印文本。但是当我使用 fputc 或 fwrite 时,它​​们会继续输入十六进制值而不是字符值。该文件是 .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 文件,因此是否需要采用十六进制?这里的每一个0确实代表一个字节吗?如果一个字符占用一个字节,它不应该能够占用一个位置(假设不需要十六进制)吗?

编辑:我意识到如果我猫它会打印出该字符。但这是否意味着每两个空格就被视为一个字节?

最佳答案

0x64 = 'c' = 99(十进制)。 “字节”值是相同的,但以不同的方式表示。

如果使用调试器查看文件的内容,调试器可能会以“十六进制”形式向您显示数据;在这种情况下,它将显示一对代表一个字节的十六进制数字。

(是的,'在十六进制中,每对字符都是一个字节。)

在 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

关于c - 为什么我的 fputc/fwrite 一直以十六进制打印以及如何打印到文件的中间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23460971/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com