将非数字字符转换为整数?

4
我今天遇到了以下代码行: int c = (int)'c'; 我之前不知道你能将 char 转换为 int。所以我试了一下,发现 a=97,b=98,c=99,d=100 等等...
为什么 'a' 是 97?这些数字有什么关联吗?

3
http://www.dotnetperls.com/ascii-table - Tim Schmelter
在你写下另一行代码之前,请阅读这篇文章:http://www.joelonsoftware.com/articles/Unicode.html - Eric Lippert
我成为了一名软件开发人员,而从未编写过任何(正确的)代码。我必须在工作中学习! :) - Mike Baxter
从技术上讲,那是一个显式转换(http://msdn.microsoft.com/en-us/library/ms173105(v=vs.80).aspx)...只是为了挑剔一下... - Jeremy Holovacs
5个回答

11

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

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

charint的隐式转换(在代码中不需要强制转换)只是以自然、非丢失方式将这个16位无符号整数转换为32位有符号整数 - 就像你有一个ushort一样。

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


4
当简单的“这是ASCII码”无法满足时,就让Jon Skeet来探究其起源吧。 - Brad Christie
1
我认为这是唯一的完整(并且100%正确)答案,它肯定值得更多的赞。 - Zbigniew
这不是第一个答案,但通常它是最有信息量的! - Mike Baxter

7

97是字母a的UTF-16码位值。

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


可快速参考asciitable.com(请查看dec列)。 - Brad Christie
从技术上讲是正确的,但 char 是一个 UTF-16 代码单元,而不是 ASCII 字符。 - RoadieRich

-1

-1

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

从技术上讲,这些字符代码并不是ASCII码。


1
它们是UTF-16代码单元,与UTF-8不同。而Visual Studio在这里的作用并不清楚,因为它是语言和平台的一部分,无论您使用哪个IDE都是如此。 - Jon Skeet
嗯,因此“我相信”...关键点是它们实际上是与ASCII相符的字符代码,但并不是真正的ASCII。 - Jeremy Holovacs
新的点踩者可以评论一下吗?这个答案在事实上是准确的。 - Jeremy Holovacs
调用UTF-16 ASCII就像把18轮卡车称作汽车一样。它们都是道路交通工具(字符编码),但虽然它们在某些工作中可以互换,但如果你总是将它们视为相同的东西,那么你会自找麻烦。 - RoadieRich
我认为你对于点踩有些过度敏感了,但无论如何。 - Jeremy Holovacs
显示剩余2条评论

-1

请使用此链接访问有关编程的内容:http://msdn.microsoft.com/zh-cn/library/vstudio/x9h8tsay.aspx - RoadieRich

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接