[英]Is it safe to cast a character type to an integer type
int main() {
char ch = 'a';
int x;
x = ch;
printf("x=%c", x);
}
此代码是否安全使用(考虑机器的使用寿命)?
是的,将char
类型(如char
)转换为整数类型(如int
)是安全的。
在这个答案和其他答案中,字节序不是一个因素。
这里进行了4次转换,并且没有强制转换:
a
是C编码的字符。 'a'
在编译时转换为int
。
'a'
将int
转换为char
。
char ch = 'a';
该char ch
将转换为int x
。 从理论上讲 ,从char
到int
**的数据可能会丢失,但是鉴于压倒性的实现,没有任何实现。 典型示例:如果char
在-128到127范围内签名,则可以很好地映射到int
。 如果char
在0到255范围内是无符号的,则这也很好地映射到int
。
int x; x = ch;
printf("%c", x)
使用传递给它的int x
值,将其转换为unsigned char
,然后打印该字符。 (C11dr§7.21.6.18 @haccks)请注意,由于可变参数的通常转换,因此没有x
的转换,因为x
都已准备好成为int
。
printf("x=%c", x);
** char
和int
的大小可以相同,并且char
的无符号数比int
。 尽管通常不会丢失数据,但这是将char
为int
的一个潜在问题。 如果char
范围在0到2³²-1之间,并且int
的范围是-(2³¹-1)到+(2³¹-1),则这可能会更加复杂。 我知道没有这样的机器。
是的,将整数类型转换为更大的整数类型始终是安全的。
标准库的*getc
(fgetc,getchar,...)函数就是这样做的-它们在内部读取unsigned chars
并将其unsigned chars
转换为int
因为int
为编码EOF(文件末尾,通常为EOF ==-1)提供了额外的空间。
是的,因为int
大于char
,但出于相同的原因,使用char
代替int
并不安全。
这里很安全,因为在调用printf
时, char
始终会转换为int
。
请参阅C ++可变参数
您首先要做的是=
int x = ch
=>将char的ascii值分配给int
最后: printf("x=%c", x);
=>将ascii值打印为一个char,这将打印与该值相对应的实际char。 是的,这样做是安全的,这完全是可预防的行为。
但是安全并不意味着有用,因为整数大于char,通常我们做相反的操作以节省一些内存。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.