回答
是的,将字符(如char
)类型转换为整数类型(如int
)是安全的。
在这个答案和其他人中,endian-ness不是一个因素。
有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
已准备好int
,因此通常转换可变参数时不存在x
的转换。printf("x=%c", x);
** char
和int
可以是相同的尺寸和char
是无符号的具有正的范围超过int
。这是铸造char
至int
的一个潜在问题,但通常不会丢失数据。如果char
具有范围0-223 -1和int
且范围为 - (2 31-1)至+(23-1-1),则该可能会更复杂。我知道没有这样的机器。
的确是这样,因为int
比char
大,但使用的char
代替int
不会是出于同样的原因是安全的。
注意:C没有指定'int'大于'char'。 'CHAR_MAX'可能大于'INT_MAX'。考虑如果'int'和'char'是相同的大小和'char'是无符号的。 – chux 2014-09-12 15:40:31
这里很安全,因为char
在拨打printf
时转换为int
。
你在做什么,首先=
int x = ch
=>的字符的ASCII值赋值给一个int
最后: printf("x=%c", x);
=>打印的ASCII值一个字符,它将打印与该值相对应的实际字符。所以,这样做是安全的,这是一个完全可预测的行为。
但安全并不意味着有用,因为整数大于char,通常我们做相反的事情来节省一些内存。
ASCII是字符集和编码是非常值得怀疑的;更可能是Windows-1252或类似的,IBM437或UTF-8。 – 2014-09-13 00:40:21
是的,将整数类型转换为更大的整数类型始终是安全的。
标准库的*getc
(龟etc,getchar函数,...)功能做到这一点 - 他们阅读unsigned chars
内部和它们转换成int
因为int
编码EOF(文件结束,提供额外的空间,通常EOF == - 1 )。
谢谢。 但是在声明中发生了什么ch2 = x; ch2将存储最低有效字节或最高有效字节。 ch2是0或'a' – 2014-09-12 15:15:26
- 1. cocoa:如何将整数类型转换为字符串类型?
- 2. 是否可以将字符串转换为List数据类型?
- 3. 将Mat安全地转换为不同类型的自己是否安全?
- 4. 字符串转换类型类类型
- 5. 如何将_sre.SRE_Match类型转换为字符串和整数
- 6. 将字符串转换为'Date'类型
- 7. 将字符串值转换为类型
- 8. 将字符串转换为类型UTCTime
- 9. 将字符串类型转换为int
- 10. 将字符串转换为类型“LuaFunction”
- 11. 将MYSQL_ROW类型转换为字符串
- 12. 如何将DataRowView类型转换为整数类型?
- 13. MongoDB将字符串类型转换为浮点类型
- 14. 将类型字符串转换为类型对象
- 15. 将字符串转换为字符串的泛型类型
- 16. 为什么它不是类型安全的将基类型实例转换为派生类型对象/参考
- 17. Jettison使用json编组将字符串数据类型转换为整数类型,当值为数字时
- 18. Java - 将数组类型转换为对象类型转换
- 19. 将类型转换为拆箱类型
- 20. 无法将类型'数字'转换为类型'0'
- 21. 将boost :: units类型转换为数字类型
- 22. 从无符号转换为带符号的类型安全吗?
- 23. 是否可以将类型转换为父类抽象类?
- 24. 不将字符串转换为整型
- 25. 从字符串“”转换为类型整数无效
- 26. 不能转换为长整数字符串(类型错误)
- 27. 从字符串“System.Data.DataRowView”转换为类型“整数”无效错误
- 28. Java数据库字符串类型和类型安全性
- 29. 在Java中是否存在“类型安全”转换的形式?
- 30. 可以将较小的整数类型分配给较大的整数类型是否不安全?
考虑到int通常比char大,我会说是。 – njzk2 2014-09-12 14:54:23
请注意'char' *是*“一个整数类型”。 – unwind 2014-09-12 14:57:30
我的实际PROGRAMM正在做这样的事情: INT getchoice(.........)// PLZ忽略的参数类型 INT主要(){ ----------- ------------ printf(“u hv selected:%c”,getchoice); ----------- } int getchoice(------) { int slected; ---------- --------- slected = getchar(); ------ ------ return slected; } – 2014-09-12 15:04:16