sinonimos sinonimo significado presentar mostrar ingles exhibir demostrar ruby ascii

sinonimo - ¿Qué es lo opuesto a chr() en Ruby?



presentar sinonimo (10)

Acabo de enterarme de esto al armar una versión pura de Ruby de Stringprep a través de RFCs.

Tenga en cuenta que el chr falla afuera [0,255], en su lugar usa reemplazos portátiles 1.9.x - 2.1.x:

[22] pry(main)> "/u0221".ord.chr RangeError: 545 out of char range from (pry):2:in ''chr'' [23] pry(main)> x = "/u0221".unpack(''U'')[0] => 545 [24] pry(main)> [x].pack(''U'') => "ȡ" [25] pry(main)>

En muchos idiomas, hay un par de funciones, chr() y ord() , que convierten números y valores de caracteres. En algunos idiomas, ord() se llama asc() .

Ruby tiene Integer#chr , que funciona genial:

>> 65.chr A

Lo suficientemente justo. ¿Pero cómo vas por el otro lado?

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

huellas dactilares:

65

y eso es bastante parecido a lo que quiero. Pero prefiero evitar un bucle: estoy buscando algo lo suficientemente corto como para ser legible cuando declaro una const .


Además, si tiene el carácter en una cadena y desea decodificarlo sin un bucle:

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


En Ruby hasta e incluyendo la serie 1.8, los siguientes producirán 65 (para ASCII):

puts ?A ''A''[0]

El comportamiento ha cambiado en Ruby 1.9, ambos de los anteriores producirán "A" en su lugar. La forma correcta de hacerlo en Ruby 1.9 es:

''A''[0].ord

Desafortunadamente, el método ord no existe en Ruby 1.8.


Estoy escribiendo código para 1.8.6 y 1.9.3 y no pude conseguir que ninguna de estas soluciones funcionara en ambos entornos :(

Sin embargo, encontré otra solución: http://smajnr.net/2009/12/ruby-1-8-nomethoderror-undefined-method-ord-for-string.html

Eso tampoco funcionó, pero lo adapté para mi uso:

unless "".respond_to?(:ord) class Fixnum def ord return self end end end

Una vez hecho esto, lo siguiente funcionará en ambos entornos

''A''[0].ord


Me gustaría +1 dylanfm y el comentario de AShelly, pero agregue el [0]:

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

La llamada de desempaquetado devuelve una matriz que contiene un entero único, que no siempre se acepta donde se desea un número entero:

$ ruby -e ''printf("0x%02X/n", "A".unpack("C"))'' -e:1:in `printf'': can''t convert Array into Integer (TypeError) from -e:1 $ ruby -e ''printf("0x%02X/n", "A".unpack("C")[0])'' 0x41 $

Intento escribir un código que funcione en Ruby 1.8.1, 1.8.7 y 1.9.2.

Editado para pasar C para descomprimir en mayúsculas, porque desempaquetar ("c") me da -1 donde ord () me da 255 (a pesar de correr en una plataforma donde está firmado el carácter de C).


Puedes tener estos:

65.chr.ord ''a''.ord.chr


Qué tal si

pone? A


Si String # ord no existía en 1.9, lo hace en 2.0:

"A".ord #=> 65


Si no te importa extraer los valores de una matriz, puedes usar "A".bytes


Tratar:

''A''.unpack(''c'')