2012-02-22 12 views
0

4つの符号なしのchar変数をパラメータとして取り、それらをunsigned intに結合する関数が必要です。最初のchar変数はintの最初のバイトであり、2番目のcharは2番目のバイトであり、以下同様です。ここに私がこれまで持っていたことは、正常に動作していないと私はそれを周りを回り、数時間のグーグルグーグル後に理由を把握することはできません。ビット単位の演算子を使って変数を結合する

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

あなたのコードの結果は、あなたの予想とどのように違うのですか? –

答えて

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

+0

あなたは正しいです。私は混乱していた。 – wildplasser