基本上我有一个包含数字的文本文件 . 我将数字更改为0以启动,然后我从文件中读取2个字节(因为int是2个字节)并将其转换为int . 然后我打印结果,但它打印出奇怪的结果 .
因此,当我有0时,由于某种原因打印出2608 .
我要发一份文件说我需要通读一个文件,其中字节0到1的偏移代表一个数字 . 所以这就是我读字节而不是字符的原因......
我想这个问题是由于读取字节而不是按字符读取,所以如果是这种情况,请你解释为什么会产生影响?
这是我的代码:
void readFile(FILE *file) {
char buf[2];
int numRecords;
fread(buf, 1, 2, file);
numRecords = buf[0] | buf[1] << 8;
printf("numRecords = %d\n", numRecords);
}
我不太确定buf [0] |是什么buf [1] << 8确实如此,但我从另一个问题得到了......所以我想这也可能是问题所在 .
2 回答
你可以直接读入整数
您需要检查系统上的
sizeof(int)
,如果需要将其四个字节声明numRecords
为short int
而不是int
文本文件中的数字
0
实际上将表示为1字节的十六进制数0x30
.0x30
已加载到buf[0]
. (在ASCII表中,0
由0x30
表示)您在
buf[1]
中有垃圾数据,在这种情况下,值为0x0a
. (0x0a
在ASCII表中是\n
)将这两个结合起来
buf[0] | buf[1] << 8
会产生0x0a30
,即十进制的2608
. 请注意<<
是按位左移运算符 .(此外,
int
类型的大小在许多系统中都是4字节 . 你应该检查出来 . )