97 votes

Quel est le contraire de chr () en Ruby?

Dans de nombreuses langues, il y a une paire de fonctions, chr() et ord(), qui convertir entre les nombres et les valeurs de caractères. Dans certaines langues, ord() est appelé asc().

Ruby a Integer#chr, ce qui fonctionne très bien:

>> 65.chr
A

Juste assez. Mais comment voulez-vous aller dans l'autre sens?

"A".each_byte do |byte|
   puts byte
end

impressions:

65

et c'est à peu près ce que je veux. Mais j'aurais vraiment préféré éviter une boucle -- je suis à la recherche de quelque chose d'assez court pour être lisible lorsque l'on déclare une const.

81voto

Rob Cameron Points 3456

Si String # ord n'existait pas dans 1.9, c'est le cas dans 2.0:

 "A".ord #=> 65
 

33voto

Robert Gamble Points 41984

Dans Ruby jusqu’à la série 1.8 incluse, les éléments suivants produiront tous deux 65 (pour ASCII):

 puts ?A
'A'[0]
 

Le comportement a changé dans Ruby 1.9, les deux précédents produiront "A" à la place. La manière correcte de faire cela dans Ruby 1.9 est la suivante:

 'A'[0].ord
 

Malheureusement, la méthode ord n'existe pas dans Ruby 1.8.

13voto

dylanfm Points 4668

Essayer:

 'A'.unpack('c')
 

10voto

user18096 Points 1277

J'aimerais +1 dylanfm et AShelly commentaire, mais ajouter de l' [0]:

'A'.unpack('C')[0]

Le déballage de l'appel renvoie un Tableau contenant un entier, ce qui n'est pas toujours acceptée si un entier est voulu:

$ ruby -e 'printf("0x%02X\n", "Un".unpack("C"))'
-e:1: `printf': impossible de convertir le Tableau en Entier (TypeError)
 de -e:1
$ ruby -e 'printf("0x%02X\n", "Un".unpack("C")[0])'
0x41
$ 

Je suis en train d'écrire du code qui fonctionne sur Ruby 1.8.1, 1.8.7 et 1.9.2.

Édité à passer à C de déballer en majuscules, parce que unpack("c") me donne -1 où ord() me donne 255 (en dépit de l'exécution sur une plate-forme où C char est signé).

3voto

Kent Fredric Points 35592

De plus, si vous avez le caractère dans une chaîne et que vous voulez le décoder sans boucle:

 puts 'Az'[0]
=> 65
puts 'Az'[1]
=> 122
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X