[英]Is there a simple way to convert a signed char to an int without sign extension?
在C语言中,我想将一个带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)溢出。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.