有没有一种简单的方法可以将签名的char转换为没有符号扩展名的int?

时间:2012-07-30 03:48:09

标签: c

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

这似乎有用(而且已经很简单了):

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

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

编辑:固定功能

2 个答案:

答案 0 :(得分:14)

您可以先转换为unsigned char。假设一个定义:

signed char c;

你可以这样做:

int i = (unsigned char)c;

答案 1 :(得分:0)

您也可以使用union(行为是实现定义的,但它在很大程度上得到了编译器的支持)。

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)。