web-dev-qa-db-fra.com

Ruby: caractère à ascii d'une chaîne

cette page wiki a donné une idée générale de la façon de convertir un seul caractère en ascii http://en.wikibooks.org/wiki/Ruby_Programming/ASCII

Mais disons que si j'ai une chaîne et que je voulais en obtenir l'ascii de chaque personnage, que dois-je faire?

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

Cela ne fonctionne pas car il n'est pas satisfait de la ligne $ ascii =? Char

syntax error, unexpected '?'
      $ascii = ?char
                ^
27
user2668

La variable c contient déjà le code char!

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

les rendements

115
116
114
105
110
103
52
Konrad Rudolph
puts "string".split('').map(&:ord).to_s
18
alexsuslin
8
user209041

Ruby String fournit la méthode codepoints aprè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]
8
LastZactionHero

utilisez "x" .ord pour un seul caractère ou "xyz" .sum pour une chaîne entière.

6
Sh.K

Vous pouvez également appeler to_a après each_byte ou encore mieux 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]
6
nikkypx
"a"[0]

ou

?a

Les deux renverraient leur ASCII équivalent.

4
Mark F