在C中,我想将signed char
转换为int
,不带符号扩展名。因此,如果signed char
为0xFF,则int
也将为0xFF。简单地转换为int是行不通的;结果将是0xFFFFFFFF(在32位机器上)。
这似乎有用(而且已经很简单了):
int convert(signed char sc) {
return 0xFF & (int) sc;
}
但是有更简单或更惯用的方法吗?
编辑:固定功能
答案 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)。