2012-02-12 15 views
1

私は、あるbのどのような値を知ることがなければ、この符号付き文字配列を符号なし整数に変換できますか?

unsigned int b = 128; 
    char a[4];  

    a[0] = b >> 24; 
    a[1] = b >> 16; 
    a[2] = b >> 8; 
    a[3] = b >> 0; 

などのsigned char型に変換されたunsigned int型を持っている私は、番号を取り戻すことができますか?以下のメソッドは128より大きい数値では失敗します。配列から数値を戻すのにあいまいさがあるようです。 unsignedsignedの変換

unsigned int c = 0; 
    c += a[0] << 24; 
    c += a[1] << 16; 
    c += a[2] << 8; 
    c += a[3]; 

    cout<<c<<endl; 
+0

あなたは '符号なしchar'配列を必要としています。 –

答えて

1
unsigned int c = ((a[0] << 24) & 0xFF000000U) 
       | ((a[1] << 16) & 0x00FF0000U) 
       | ((a[2] << 8) & 0x0000FF00U) 
       | (a[3]  & 0x000000FFU); 

または

unsigned int c = unsigned(a[0]) << 24 
       | unsigned(a[1]) << 16 
       | unsigned(a[2]) << 8 
       | unsigned(a[3]); 
0

はお勧めできません。それをやりたい場合は、手動で行う必要があります。簡単ではない、AFAIK。

thisをご覧ください。

関連する問題