1

C で、符号拡張なしsigned charで aを anintに変換したいと思います。したがって、が 0xFF の場合、 も 0xFF になります。int への単純なキャストは機能しません。結果は 0xFFFFFFFF になります (32 ビット マシンの場合)。signed charint

これはうまくいくようです(そして、すでにかなり単純です):

int convert(signed char sc) {
    return 0xFF & (int) sc; 
}

しかし、もっと簡単で慣用的な方法はありますか?

編集:固定機能

4

2 に答える 2

17

You can cast to unsigned char first. Assuming a definition:

signed char c;

You could just do:

int i = (unsigned char)c;
于 2012-07-30T03:49:30.287 に答える
0

共用体を使用することもできます (動作は実装によって定義されますが、大部分はコンパイラによってサポートされています)。

int
convert(signed char ch)
{
    union {
        signed char c1;
        int c2;
    } input = { ch };
    return input.c2;
}

または、Carl Norum が言ったように、次のように単純にキャストできますunsigned char

int 
convert(signed char ch)
{
    return (int)(unsigned char)ch;
}

0xFF charただし、値 (10 進数で 255)のオーバーフローがあるため、注意してください。

于 2012-07-30T06:02:17.270 に答える