En la tabla ASCII existe el carácter 'J' que tiene puntos de código en diferentes sistemas de numeración:
Oct Dec Hex Char
112 74 4A J
Es posible imprimir este carácter por un punto de código octal imprimiendo
printf '\112'
o echo $'\112'
. ¿Cómo imprimo el mismo carácter mediante presentaciones de punto de código decimal y hexadecimal?
Respuestas:
Maleficio:
Dic:
Alternativa para hexadecimal :-)
fuente
awk
.Con
zsh
:Para obtener un carácter (en el juego de caracteres actual) del punto de código Unicode:
fuente
En general, el shell podría comprender números hexadecimales, oct y decimales en variables, siempre que se hayan definido como
integers
:O son el resultado de una "Expansión Aritmética":
Entonces, solo necesita una forma de imprimir el carácter que pertenece a un valor variable.
Pero aquí hay dos formas posibles:
Se necesitan los dos printf, uno para transformar el valor en una cadena hexadecimal y el segundo para imprimir realmente el carácter.
El segundo imprimirá cualquier punto UNICODE (si su consola está configurada correctamente).
Por ejemplo:
Un hombre de nieve
El personaje que tiene una representación utf-8 como
f0 9f 90 ae
es0x1F42E
. Buscarcow face site:fileformat.info
a conseguirlo :Nota : Hay un problema con la forma UNICODE en que para bash antes de 4.3 (corregido en esa versión y hacia arriba), los caracteres entre UNICODE puntos 128 y 255 (en decimal) pueden imprimirse incorrectamente.
Referencias
Cuarto párrafo adentro
PARAMETERS
enman bash
:Dentro de "EVALUACIÓN ARITMÉTICA" en
man bash
:fuente
é
(Octal: 351, Dec: 233, Hex: 0xE9) se imprime incorrectamenteprintf '\351'
ya que imprime un valor de byte de0xE9
siempre. Para un terminal con una codificación deISO-8859-1
(y primos) que puede funcionar, pero en terminales codificados utf-8, un valor de byte0xE9
debería aparecer como . cont ....\u
(que proviene de zsh).Decimal:
Maleficio:
La función puede hacer secuencias:
fuente
Puede usar la biblioteca POSIX Awk stdlib :
fuente
Si tiene una lista de números para convertir y desea evitar una llamada a la función y crear una subshell para cada carácter, puede definir el conjunto ascii de antemano:
Tenga en cuenta que el carácter nulo está excluido, por lo que cada carácter está compensado por 1.
Luego use algo como esto (supone 1 número por línea):
fuente
Aquí están todas las conversiones usando
printf
:fuente