Ruby: caractere para ASCII de uma string
Pergunta
desta página wiki deu uma idéia geral de como converter um único caractere para ascii http: // en.wikibooks.org/wiki/Ruby_Programming/ASCII
Mas dizer se eu tiver uma corda e eu queria ter ascii de cada personagem a partir dele, o que eu preciso fazer?
"string".each_byte do |c|
$char = c.chr
$ascii = ?char
puts $ascii
end
Não funciona porque não é feliz com a linha $ ascii =? Caractere
syntax error, unexpected '?'
$ascii = ?char
^
Solução
A variável c
já contém o código de caractere!
"string".each_byte do |c|
puts c
end
rendimentos
115
116
114
105
110
103
Outras dicas
puts "string".split('').map(&:ord).to_s
consulte este post para as mudanças no ruby1.9 Obtendo um código de caracteres ASCII em ruby ??usando `?` (ponto de interrogação) falhar
Rubi Cordas fornece o método codepoints
após 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]
uso "x" .ord para um único caractere ou .sum "xyz" para toda uma série.
Você também pode apenas chamar to_a após each_byte ou ainda melhor 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]
"a"[0]
ou
?a
Ambos voltariam seu equivalente ASCII.