unix shell hex

Convierta decimal a hexadecimal en script de shell UNIX



(9)

¿Intentó printf(1) ?

printf "%x/n" 34 22

Probablemente haya formas de hacerlo con funciones integradas en todas las cubiertas, pero sería menos portátil. No he comprobado las especificaciones de POSIX sh para ver si tiene tales capacidades.

En un script de shell UNIX, ¿qué puedo usar para convertir números decimales a hexadecimales? Pensé que od haría el truco, pero no me estoy dando cuenta de que estoy alimentando las representaciones ASCII de números.

printf? ¡Bruto! Usándolo por ahora, pero ¿qué más hay disponible?



En mi caso, me encontré con un problema con el uso de la solución printf:

$ printf "%x" 008 bash: printf: 008: invalid octal number

La forma más fácil era usar la solución con bc , sugerida en post mayor:

$ bc <<< "obase=16; 008" 8


Lo siento, culpa mía, intenta esto ...

#!/bin/bash : declare -r HEX_DIGITS="0123456789ABCDEF" dec_value=$1 hex_value="" until [ $dec_value == 0 ]; do rem_value=$((dec_value % 16)) dec_value=$((dec_value / 16)) hex_digit=${HEX_DIGITS:$rem_value:1} hex_value="${hex_digit}${hex_value}" done echo -e "${hex_value}"

Ejemplo:

$ ./dtoh 1024 400


Tratar:

printf "%X/n" ${MY_NUMBER}


Hexadecimal a decimal:

$ echo $((0xfee10000)) 4276158464

De decimal a hexadecimal:

$ printf ''%x/n'' 26 1a


# number conversion. while `test $ans=''y''` do echo "Menu" echo "1.Decimal to Hexadecimal" echo "2.Decimal to Octal" echo "3.Hexadecimal to Binary" echo "4.Octal to Binary" echo "5.Hexadecimal to Octal" echo "6.Octal to Hexadecimal" echo "7.Exit" read choice case $choice in 1) echo "Enter the decimal no." read n hex=`echo "ibase=10;obase=16;$n"|bc` echo "The hexadecimal no. is $hex" ;; 2) echo "Enter the decimal no." read n oct=`echo "ibase=10;obase=8;$n"|bc` echo "The octal no. is $oct" ;; 3) echo "Enter the hexadecimal no." read n binary=`echo "ibase=16;obase=2;$n"|bc` echo "The binary no. is $binary" ;; 4) echo "Enter the octal no." read n binary=`echo "ibase=8;obase=2;$n"|bc` echo "The binary no. is $binary" ;; 5) echo "Enter the hexadecimal no." read n oct=`echo "ibase=16;obase=8;$n"|bc` echo "The octal no. is $oct" ;; 6) echo "Enter the octal no." read n hex=`echo "ibase=8;obase=16;$n"|bc` echo "The hexadecimal no. is $hex" ;; 7) exit ;; *) echo "invalid no." ;; esac done


bash-4.2$ printf ''%x/n'' 4294967295 ffffffff bash-4.2$ printf -v hex ''%x'' 4294967295 bash-4.2$ echo $hex ffffffff


echo "obase=16; 34" | bc

Si desea filtrar un archivo completo de enteros, uno por línea:

( echo "obase=16" ; cat file_of_integers ) | bc