我正在阅读其他人的代码并且无法理解它是如何工作的。这是三行代码。我想知道w3的价值是什么:
int w1 = fgetc(fp) & 0xFF;
int w2 = fgetc(fp) & 0xFF;
int w3 = w1 + (w2 << 8);
我知道fgetc()从FILE * fp返回一个字符,但是当他使用&amp;时,我会感到困惑。运算符在值为0xFF的字符上。然后在w2上使用按位移位运算符并将其添加到w1。我不确定我是否应该期待一个字符或一个整数。这是程序中的代码片段,它从文件中读取二进制数据,生成UV坐标作为输出。但我不太关心这一点,而更关心上述代码的工作原理。
提前感谢您的回复。
答案 0 :(得分:3)
& 0xff
确保结果是无符号的。然后,w1 + (w2 << 8)
从两个字节中生成一个16位整数。实际上,这段代码片段是以小端两字节整数读取的。
答案 1 :(得分:1)
这个int w1 = fgetc(fp) & 0xFF;
做的是将收到的int
掩盖成一个字节。 (fgetc()
毕竟返回int
这个w1 + (w2 << 8);
做的是将两个字节组合成一个int
。可能试图反序列化以前序列化的整数。 (如果字节顺序是个问题,那么这不是最好的方法)