使用文件指针的C ++按位移位

时间:2013-02-07 00:54:11

标签: c++ hex bit-manipulation operator-keyword shift

我正在阅读其他人的代码并且无法理解它是如何工作的。这是三行代码。我想知道w3的价值是什么:

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

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

提前感谢您的回复。

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

这个int w1 = fgetc(fp) & 0xFF;做的是将收到的int掩盖成一个字节。 (fgetc()毕竟返回int

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