You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 00:15:33