Me gustaría convertir ASCII código (como -
o _
o .
, etc.) a la representación hexadecimal en el shell de Unix (sin el comando bc
), por ejemplo: -
=> %2d
.
¿Algunas ideas?
Hay una herramienta printf
que simula la función C; normalmente está en /usr/bin/printf
, pero muchos shells también implementan funciones integradas. Puedes usar %02x
para obtener la representación hexadecimal de un carácter, pero debe asegurarse de pasar una cadena que incluya el carácter entre comillas simples (Editar: resulta solo una comilla simple al principio es suficiente):
printf "%%%02x\n" "'-" # Outputs %2d
Puede hacer que una función Shell sea conveniente:
function hex() {
printf "%%%02x\n" "'$1"
}
hex - # Outputs %2d
hex _ # Outputs %5f
hex . # Outputs %2e
Prueba od :
$ echo -n "-_". | od -A n -t x1
2d 5f 2e
-A n
significa no imprimir compensaciones y -t x1
significa que el tipo de entrada es entero hexadecimal de 1 byte.
xxd
es una utilidad de volcado hexadecimal que se envía como parte de vim-common
paquete
Tiene un útil -p
opción que genera un estilo hexdump 'simple/postscript' continuo. Esto se puede revertir fácilmente mediante -r
... -u
dará salida a dígitos hexadecimales en mayúsculas.
$ echo -n "M" |xxd -p # 1 ASCII char= 1 UTF-8 byte; Unicode Codepoint: U+0041
4d
$ echo -n "〶" |xxd -p -u # 1 CJK char= 3 UTF-8 bytes; Unicode Codepoint: U+3036
E380B6
$ echo -n "Dump a string" |xxd -p -u
44756D70206120737472696E67
$ echo -n "Dump and Revert" |xxd -p |xxd -r
Dump and Revert