str_limit - ¿Cómo funciona string.unpack en Ruby?
substr laravel (3)
¿Alguien puede explicar por qué cómo se calcula el resultado para el siguiente desempaquetado?
"aaa".unpack(''h2H2'') #=> ["16", "61"]
En binario, ''a'' = 0110 0001. No estoy seguro de cómo el ''h2'' puede convertirse en 16 (0001 0000) o ''H2'' puede convertirse en 61 (0011 1101).
El código hexadecimal de char a
es 61.
La plantilla h2
es una cadena hexagonal (bajo nybble primero), H2
es lo mismo con mordisco alto primero.
También vea la documentación de perl .
Consulte la referencia Programación de Ruby al desempaquetar. Aquí hay un fragmento:
Decodifica str (que puede contener datos binarios) de acuerdo con la cadena de formato, devolviendo una matriz de cada valor extraído. La cadena de formato consiste en una secuencia de directivas de un solo carácter, resumidas en la Tabla 22.8 en la página 379. Cada directiva puede ir seguida de un número, que indica el número de veces que debe repetirse con esta directiva. Un asterisco ("*") agotará todos los elementos restantes. Las directivas sSiIlL pueden ir seguidas de un guión bajo ("_") para usar el tamaño nativo de la plataforma subyacente para el tipo especificado; de lo contrario, usa un tamaño consistente independiente de la plataforma. Los espacios se ignoran en la cadena de formato. Consulte también Paquete de matriz # en la página 286.
Y los personajes relevantes de tu ejemplo:
H Extrae nibbles hexagonales de cada personaje (el más significativo primero).
h Extraiga los nibbles hexagonales de cada carácter (menos significativo primero).
No 16 - muestra 1 y luego 6. h le da el valor hexadecimal de cada nibble, por lo que obtienes 0110 (6), luego 0001 (1), dependiendo de si es el bit alto o bajo que estás mirando. Usa primero el nibble alto y obtienes 61, que es hexadecimal para 97 - el valor de ''a''