1

在 C 中,我想将 a 转换signed charint没有符号扩展名。因此,如果signed char是 0xFF,则int也将是 0xFF。简单地转换为 int 是行不通的;结果将是 0xFFFFFFFF(在 32 位机器上)。

这似乎有效(并且已经非常简单):

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

但是有没有更简单或更惯用的方法?

编辑:固定功能

4

2 回答 2

17

你可以unsigned char先投。假设定义:

signed char c;

你可以这样做:

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值溢出(十进制为 255)。

于 2012-07-30T06:02:17.270 回答