基本上我有一个包含数字的文本文件。我将数字更改为 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 确实如此,但我是从另一个问题中得到的......所以我想这也可能是问题所在。
最佳答案
号码0
在您的文本文件中实际上将表示为 1 字节的十六进制数 0x30
. 0x30
加载到 buf[0]
. (在 ASCII 表中,0
表示为 0x30
)
您在 buf[1]
中有垃圾数据, 在本例中值为 0x0a
. (0x0a
在 ASCII 表中是 \n
)
通过 buf[0] | buf[1] << 8
将这两者结合起来结果 0x0a30
这是 2608
十进制。注意 <<
是按位左移运算符。
(此外,int
类型的大小在许多系统中为 4 字节。您应该检查一下。)
关于c - 从文件中读取 2 个字节并转换为 int 会给出错误的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44752780/