使用`?`(问号)在Ruby中获取ASCII字符代码失败

时间:2009-08-13 05:41:35

标签: ruby char ascii

我遇到的情况是我需要一个字符的ASCII值(对于Project Euler question #22,如果你想特定的话),我遇到了一个问题。

对ruby不熟悉,我用Google搜索,发现?是要走的路:?A或其他什么。但是当我将它合并到我的代码中时,该语句的结果是字符串"A" - 没有字符代码。与[0]slice(0)相同的问题,两者理论上都应返回ASCII代码。

我唯一能想到的是这是一个ruby版本问题。我正在使用1.9.1-p0,从今天下午的1.8.6升级。我在同一个目录中对Ruby的工作版本进行了一些欺骗,我想我可能已经有了与.zip文件捆绑在一起的文件了,所以我没有下载它们。

那么为什么我的所有ASCII码都变成了实际的字符呢?

6 个答案:

答案 0 :(得分:70)

Ruby之前处理过的字符有点不一致。 ?a"a"[0]将返回一个表示字符ASCII值的整数(通常不是人们正在寻找的行为),但在实际使用中,字符通常由一个字符的字符串表示。在Ruby 1.9中,字符永远不会神秘地变成整数。如果要获取字符的ASCII值,可以使用ord方法,如?a.ord(返回97)。

答案 1 :(得分:35)

怎么样

"a"[0].ord

1.8 / 1.9可移植性。

答案 2 :(得分:12)

适用于1.8和1.9

?a.class == String ? ?a.ord : ?a

"a".class == String ? "a".ord : "a"[0]

答案 3 :(得分:8)

找到解决方案。 “string”.ord返回s的ascii代码。 看起来我发现的方法在1.9系列的红宝石中被打破了。

答案 4 :(得分:7)

Ruby Programming/ASCII

在1.9之前的ruby版本中,您可以使用问号语法。

?a

在1.9之后,我们使用ord。

'a'.ord    

答案 5 :(得分:-2)

如果您再次阅读项目Euler中的问题22,您会发现您没有找到字符的ASCII值。问题是什么,例如字符“A”是1,它在字母表中的位置,其中“A”的ASCII值为65.