【发布时间】: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的值并溢出?为什么正确分配给a和b?