【问题标题】:Casting non-numeric char to int?将非数字char转换为int?
【发布时间】:2013-04-10 01:40:42
【问题描述】:

我今天遇到了这行代码:

int c = (int)'c';

我不知道您可以将 char 转换为 int。于是我测试了一下,发现a=97, b=98, c=99, d=100 等等...

为什么是 'a' 97?这些数字与什么有关?

【问题讨论】:

标签: c#


【解决方案1】:

其他人(到目前为止)都提到了 ASCII。这是一个非常有限的观点 - 它适用于 'a',但不适用于带有重音等的任何东西 - 这可以很容易地用 char 表示。

char 只是一个无符号的 16 位整数,它是一个 UTF-16代码单元通常相当于 Unicode 字符,但并非总是如此 - 有时单个完整字符需要多个代码单元。有关详细信息,请参阅System.Char 的文档。

charint 的隐式转换(您不需要在代码中进行强制转换)只是以自然、无损的方式将该 16 位无符号整数转换为 32 位有符号整数 -就好像你有一个ushort

请注意,ASCII 中的每个有效字符在 UTF-16 中具有相同的值,这就是为什么当示例只是来自 ASCII 集中的示例时,这两者经常被混淆。

【讨论】:

  • 当一个简单的“它是 ascii”不够用时,让 Jon Skeet 来了解病因。
  • 嗯,我认为这是唯一完整(并且 100% 正确)的答案,它当然值得更多的支持。
  • 这不是第一个答案,但像往常一样,它是最有用的!
【解决方案2】:

97是字母a的UTF-16编码单元值。

这个数字基本上与给定字符的 UTF-16 代码单元有关。

【讨论】:

  • asciitable.com 供快速参考(请参阅 dec 列)。
  • 技术上正确,但char 是 UTF-16 代码单元,而不是 ascii 字符。
【解决方案3】:

【讨论】:

    【解决方案4】:

    它们是对应的 ascii 的十进制表示: http://www.asciitable.com/index/asciifull.gif 所以“a”是 97

    【讨论】:

    【解决方案5】:

    它们是字符代码,通常称为 ASCII 值。

    但从技术上讲,字符代码不是 ASCII。

    【讨论】:

    • 它们是 UTF-16 代码单元。 与 UTF-8 相同。也不清楚 VS 在哪里出现......它是语言和平台的一部分,无论您使用哪种 IDE。
    • 嗯,因此“我相信”......相关的一点是它们实际上是与 ASCII 一致的字符代码,但实际上不是 ASCII。
    • 新的反对者关心评论?答案实际上是准确的。
    • 调用 UTF-16 ascii 就像将 18 轮车称为汽车。它们都是道路车辆(字符代码),但虽然它们可以在某些工作中互换,但如果你总是对它们一视同仁,那你就是在自找麻烦。
    • @RoadieRich,请再次阅读我的回答。我称它们为字符代码。只需查看这个称它们为 ASCII 代码的答案列表,就会发现人们通常将它们称为 ASCII 值,但事实并非如此。就像我注意到的那样。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2020-04-15
    • 1970-01-01
    相关资源
    最近更新 更多