Ответ 1
В переменной c
уже содержится код char!
"string".each_byte do |c|
puts c
end
дает
115
116
114
105
110
103
Эта страница wiki дала общее представление о том, как преобразовать один char в 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
^
В переменной c
уже содержится код char!
"string".each_byte do |c|
puts c
end
дает
115
116
114
105
110
103
puts "string".split('').map(&:ord).to_s
см. этот пост для изменений в ruby1.9 Получение символьного кода ASCII в Ruby с использованием`? `(вопросительный знак) не удается
используйте "x".ord для одного символа или "xyz".sum для целой строки.
"a"[0]
или
?a
Оба возвращают их эквивалент ASCII.
Ruby String предоставляет метод codepoints
после 1.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]
Вы также можете просто вызвать to_a после each_byte или даже лучше String # bytes
=> '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]