2

我正在阅读别人的代码,但不太明白它是如何工作的。这是三行代码。我想知道 w3 的值是多少:

int w1 = fgetc(fp) & 0xFF;
int w2 = fgetc(fp) & 0xFF;
int w3 = w1 + (w2 << 8);

我知道 fgetc() 从 FILE* fp 返回一个字符,但是当他对值为 0xFF 的字符使用 & 运算符时,我感到很困惑。然后在 w2 上使用按位移位运算符并将其添加到 w1。我不确定我应该期待一个字符还是一个整数。这是一个程序的代码片段,它从文件中读取二进制数据,生成 UV 坐标作为输出。但我不太关心这一点,而更关心上面的代码是如何工作的。

提前感谢您的任何回复。

4

2 回答 2

3

& 0xff确保结果是无符号的。然后,w1 + (w2 << 8)从这两个字节中生成一个 16 位整数。实际上,此代码片段正在读取一个小端序的两字节整数。

于 2013-02-07T00:59:04.133 回答
1

这样int w1 = fgetc(fp) & 0xFF;做是将接收到的内容屏蔽int为单个字节。(毕竟fgetc()返回)int

这样w1 + (w2 << 8);做是将两个字节组合成一个int. 可能试图反序列化以前序列化的整数。(如果字节序是一个问题,这不是最好的方法)

于 2013-02-07T00:58:14.600 回答