在 C 中,我想将 a 转换signed char
为int
,没有符号扩展名。因此,如果signed char
是 0xFF,则int
也将是 0xFF。简单地转换为 int 是行不通的;结果将是 0xFFFFFFFF(在 32 位机器上)。
这似乎有效(并且已经非常简单):
int convert(signed char sc) {
return 0xFF & (int) sc;
}
但是有没有更简单或更惯用的方法?
编辑:固定功能
在 C 中,我想将 a 转换signed char
为int
,没有符号扩展名。因此,如果signed char
是 0xFF,则int
也将是 0xFF。简单地转换为 int 是行不通的;结果将是 0xFFFFFFFF(在 32 位机器上)。
这似乎有效(并且已经非常简单):
int convert(signed char sc) {
return 0xFF & (int) sc;
}
但是有没有更简单或更惯用的方法?
编辑:固定功能
你可以unsigned char
先投。假设定义:
signed char c;
你可以这样做:
int i = (unsigned char)c;
您还可以使用联合(行为是实现定义的,但它在很大程度上受到编译器的支持)。
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)。