33

这个 wiki 页面给出了如何将单个字符转换为 ascii http://en.wikibooks.org/wiki/Ruby_Programming/ASCII

但是假设我有一个字符串并且我想从中获取每个字符的 ascii,我需要做什么?

"string".each_byte do |c|
      $char = c.chr
      $ascii = ?char
      puts $ascii
end

它不起作用,因为它对 $ascii = ?char 行不满意

syntax error, unexpected '?'
      $ascii = ?char
                ^
4

7 回答 7

56

c变量已经包含字符代码!

"string".each_byte do |c|
    puts c
end

产量

115
116
114
105
110
103
于 2008-09-27T15:37:24.587 回答
20
puts "string".split('').map(&:ord).to_s
于 2012-03-19T16:37:00.183 回答
10

Ruby String 提供了codepoints1.9.1 之后的方法。

str = 'hello world'
str.codepoints.to_a
=> [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100] 

str = "你好世界"
str.codepoints.to_a
=> [20320, 22909, 19990, 30028]
于 2015-07-23T14:55:08.687 回答
9

对单个字符使用 "x".ord,对整个字符串使用 "xyz".sum。

于 2013-12-15T19:59:25.227 回答
8

有关 ruby​​1.9 中的更改,请参阅这篇文章使用 `?`(问号)在 Ruby 中获取 ASCII 字符代码失败

于 2010-03-03T09:50:14.090 回答
7

您也可以在 each_byte 甚至更好的 String#bytes 之后调用 to_a

=> 'hello world'.each_byte.to_a
=> [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]

=> 'hello world'.bytes
=> [104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100]
于 2015-11-13T19:31:51.837 回答
4
"a"[0]

或者

?a

两者都将返回它们的 ASCII 等价物。

于 2009-10-13T00:53:11.363 回答