首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的fputc/fwrite总是以十六进制打印,如何打印到文件的中间?

为什么我的fputc/fwrite总是以十六进制打印,如何打印到文件的中间?
EN

Stack Overflow用户
提问于 2014-05-04 20:01:53
回答 1查看 1.1K关注 0票数 0

我试图使用print到文件中的特定位置并打印文本。但是,当我使用fputc或fwrite时,它们总是输入十六进制值,而不是char值。该文件是一个.dat,最初填充0。因此,除此之外,如果我试图写到某个地方,文件的其余部分就会被删除.我需要它保持不变,但这个新的文本覆盖了特定的位置。除此之外,为什么我的搜索一次移动两个字节而不是一个字节呢?代码:

代码语言:javascript
运行
复制
    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表示一个字节,对吗?如果一个字符占用一个字节,那么它不应该占据一个位置(假设不需要十六进制)吗?

编辑:我已经意识到,如果我猫它打印出来的字符。但这是否意味着每两个空格都被视为一个字节?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-04 20:47:36

0x64 = 'c‘= 99 (小数)。“字节”值是相同的,以不同的方式表示。

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

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

在C中,可以打印出以各种方式表示的字节值:

代码语言:javascript
运行
复制
printf("%d", 0x63);  // will print out: 99
printf("%X", 0x63);  // will print out: 63
printf("%c", 0x63);  // will print out: c

代码语言:javascript
运行
复制
printf("%d", 99);  // will print out: 99
printf("%X", 99);  // will print out: 63
printf("%c", 99);  // will print out: c

代码语言:javascript
运行
复制
printf("%d", 'c');  // will print out: 99
printf("%X", 'c');  // will print out: 63
printf("%c", 'c');  // will print out: c
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23460971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档