2009-10-14 70 views
1
(INBuffer[3] << 8) + INBuffer[2] 

这是否实质上将INBuffer [3]中的位移动到INBuffer [2]或[3]中,然后被添加到[2]中?这个位移操作正在做什么?

+1

什么语言是这个代码? – 2009-10-14 14:25:28

+0

C++,但我正在翻译为C# – 2009-10-14 14:35:53

回答

10

这是一种简单的方法,可以根据两个8位值创建一个16位值。

INBuffer[3] = 0b01001011; 
INBuffer[2] = 0b00001001; 

INBuffer[3]<<8 // 0b0100101100000000; 
(INBuffer[3]<<8) + INBuffer[2] // 0b0100101100001001 

这通常表示为

(INBuffer[3]<<8) | INBuffer[2]; 
+0

正确。该代码从内存中以Hi-Low格式(而不是Intel上的低 - 高)存储的16位值提取,无论内存对齐和平台endianess如何。如果您正在解码文件格式或从另一个CPU读取数据,这是有道理的。 – Adriaan 2009-10-14 15:23:13

6

根据不同的语言这一最有可能的计算

InBuffer[3] * 256 + InBuffer[2] 

或(这是最有可能根据语言相同)performes包装两个字节为一个16位字。