【问题标题】:fprintf() and fread() usage with .txt filesfprintf() 和 fread() 与 .txt 文件一起使用
【发布时间】:2018-02-27 04:57:58
【问题描述】:

如果我要使用

fprintf(fp, "%d", 1);

要写入txt 文件,我的文件内容是十六进制 值1 还是31? ('1' 的 ASCII 值)

另外,fread() 函数究竟是如何读取数据的? 我有一个包含 2 个字节的文件,十六进制值分别为 32 和 33。 这是我的代码:

struct S {char a,b;} x; 
FILE *f = fopen("F.TXT","rb"); 
if (f) { 
   fread(&x,1,sizeof(x),f); 
   printf("1:%c\n", x.b); 
   printf("2:%c\n", x.a); 
}

输出如下:

1:3
2:2

为什么会这样?

【问题讨论】:

  • 我不明白这个问题。 0x33 是 3 的 ASCII 的十六进制值。
  • @EugeneSh。没问题,只是想知道 fread 是如何处理数据的。
  • fread 正在读取二进制数据。 printf 正在按照格式字符串的指示进行解释。
  • fprintf(fp, "%d", 1); 将字符 (ASCII) '1' 写入文件。
  • @EugeneSh。 fread 的原型是 fread(void, size of element, number of elements, FILE *);,我读取了 2 个字节的 1 个元素,为什么没有分配给 x.a 的值并溢出?为什么正确分配给ab

标签: c file hex printf fread


【解决方案1】:

回答 OP 的第一个问题:

鉴于此声明:

fprintf(fp, "%d", 1);

文件的内容将是一个包含以下内容的字符:

0x31

这是 ASCII 字符的十六进制值:1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-07-15
    • 2015-08-31
    • 2016-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    相关资源
    最近更新 更多