繁体   English   中英

将字符类型转换为整数类型是否安全?

[英]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次转换,并且没有强制转换:

  1. a是C编码的字符。 'a'在编译时转换为int

     'a' 
  2. int转换为char

     char ch = 'a'; 
  3. char ch将转换为int x 理论上讲 ,从charint **的数据可能会丢失,但是鉴于压倒性的实现,没有任何实现。 典型示例:如果char在-128到127范围内签名,则可以很好地映射到int 如果char在0到255范围内是无符号的,则这也很好地映射到int

     int x; x = ch; 
  4. printf("%c", x)使用传递给它的int x值,将其转换为unsigned char ,然后打印该字符。 (C11dr§7.21.6.18 @haccks)请注意,由于可变参数的通常转换,因此没有x的转换,因为x都已准备好成为int

     printf("x=%c", x); 

** charint的大小可以相同,并且char的无符号数比int 尽管通常不会丢失数据,但这是将charint的一个潜在问题。 如果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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM