Kotlin中char.toInt()为何返回数字值加48?
为什么
char.toInt()返回的数字比实际字符大48? 这是因为char.toInt()(以及char.code)返回的是字符对应的ASCII(或Unicode)编码值,而非字符代表的数字本身。
数字字符'0'到'9'在ASCII编码中的十进制值范围是48到57:
- 字符'0'的编码值是48
- 字符'1'的编码值是49
- ...
- 字符'9'的编码值是57
所以当你调用'1'.toInt()时,得到的是字符'1'的ASCII编码49,比实际数字1大48;同理'0'.toInt()返回48,正好是数字0加48。
而char.toString().toInt()是另一种逻辑:先将单个字符转为对应的字符串(比如'1'→"1"),再调用字符串的数字解析方法,这个方法会识别字符串所代表的数字含义,因此能得到预期的1、0这类实际数字值。
优化小技巧
如果想直接从数字字符转换为对应的Int值,还可以用更高效的方式:利用数字字符编码的连续性,用当前字符减去'0'的编码值,比如:
x = c - '0'
这样'1' - '0'会直接得到1,'2' - '0'得到2,无需转字符串,性能更优。
你的代码对比验证
从你提供的测试表格也能清晰看到差异:
| tileMap X定义 | tileMap Y定义 | tileMap中的坐标 | 实际坐标(来自tag) |
|---|---|---|---|
char.toInt() | char.toInt() | "49, 50" | "1, 2" |
char.toString().toInt() | char.toString().toInt() | "1, 2" | "1, 2" |
char.toInt() | char.toString().toInt() | "49, 2" | "1, 2" |
内容的提问来源于stack exchange,提问作者Zytron
相关产品推荐
相关产品推荐

