2009-10-14 51 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位字。