2012-02-22 45 views
0

我需要一個函數,它將四個無符號字符變量作爲參數並將它們組合爲一個無符號整數。第一個char變量是int的第一個字節,第二個char是第二個字節,依此類推。這是我到目前爲止,它沒有正常工作,我搞不清楚爲什麼弄亂它和谷歌搜索幾個小時後。使用按位運算符組合變量

uint32_t combineChar(unsigned char one, unsigned char two, unsigned char three, unsigned char four){ 

uint32_t com; 

com = (uint32_t)one; 

com = com << 8 | (uint32_t)two; 

com = com << 8 | (uint32_t)three; 

com = com << 8 | (uint32_t)four; 

return com;  

}

+2

代碼的結果與您的期望有什麼不同? – 2012-02-22 23:38:16

回答

0

你的代碼是字節序,依賴。第一個字節(uint32_t)在某些系統中是最左邊的,而在有些系統中是最正常的,所以你可以以與你想要的相反的方式存儲字節。

(其實,如果你只想要uint32_t,它的罰款問題開始,當你工會將其與char[4],或者類似的東西。)

0

檢查的「< <」的優先級和「|」運營商。

uint32_t combineChar(unsigned char one, unsigned char two 
        , unsigned char three, unsigned char four){ 

    return one | (two << 8) | (three << 16) | (four <<24); 

} 
+0

這裏不需要方括號。 '<<'高於'|'。見下表:http://en.wikipedia.org/wiki/Operators_in_C_and_C%2B%2B#Operator_precedence – asaelr 2012-02-22 23:46:44

+0

你說得對。我很困惑。 – wildplasser 2012-02-22 23:49:22