Tengo un contexto donde necesito convertir binario a hexadecimal y decimal y viceversa en un script de shell. ¿Alguien puede sugerirme una herramienta para esto?
shell-script
binary
arithmetic
Bangi
fuente
fuente
Respuestas:
Es bastante sencillo hacer la conversión de binario en bash puro (
echo
yprintf
son incorporados):Binario a decimal
Binario a hexadecimal
Regresar a binario usando bash solo es algo más complejo, por lo que sugiero que vea las otras respuestas para soluciones a eso.
fuente
printf '%x\n' 10
, por ejemplo.printf %d
para bin2dec?$(( ... ))
Ya da un resultado decimal,echo
es suficiente.printf '%s\n' foo
lugar deecho
por una variedad de razones (principalmente portabilidad), por la misma razón, no lo uso aquí.echo
integrada bien implementada ). ¡Culpa mía!Suponiendo que por binario, se refiere a datos binarios como en datos con cualquier valor de byte posible, incluido 0, y no números de base 2:
Para convertir a binario,
od
(estándar),xxd
(viene convim
) operl
'sunpack
vienen a la mente.Ahora, para volver a convertir a binario,
awk
(estándar)xxd -r
operl
'spack
:De la salida decimal de
od -tu1
operl
superior:Del hexa
perl
oxxd -p
superior:fuente
Puede usar bc para esto manipulando los parámetros
ibase
yobase
:El truco es que debes ser explícito sobre las bases. Entonces, si su ibase es 2, entonces si establece su obase en 10, no hará nada, ya que 10 en binario es 2. Por lo tanto, debe usar la notación hexadecimal.
Entonces binario a decimal sería (mira que obase es A)
Binario a decimal:
Binario a hexadecimal:
Si la 'base de salida'
obase
se cambia primero, debería ser más fácil:fuente
echo 'ibase=2;obase=F;1111
cuál debería ser igual a 15 decimal, es decir. F en hex. Sale como 10, que está en la base 15 (dígitos 0-E). También es más fácil si usted indica el obase primero , por ejemplo:echo 'obase=16;ibase=2;1111'|bc
. No hay confusiónibase
, debe proporcionar información en esa base, incluso paraobase
. Así en tu ejemplo seríaecho 'ibase=2;obase=10000;11110001011010'|bc
. Es mejor escuchar los consejos de goldilocks y revertir el orden: primeroobase
, luegoibase
.Si te refieres a convertir números de base-2 a 10 o 16 y viceversa,
bc
es la herramienta estándar para hacer eso como ya lo mencionó psarossy .Algunos shells como
zsh
tienen soporte incorporado para conversión de base como parte de sus operadores de expansión aritmética:y así.
Ambos
ksh93
yzsh
también apoyan:Pero tenga en cuenta que, cuando se expande,
$binary
tendrá un prefijo2#
o16#
(que puede eliminar${binary#*#}
.ksh93
también es compatible con:para convertir a binario.
fuente
Para uso binario a hexadecimal: herramienta xxd en linux y para binario a decimal, puede usar la herramienta qalculate.
Para obtener ayuda sobre el tipo xxd
xxd --help
oman xxd
en Linux.fuente
Puedes usar PHP:
O Perl:
O POSIX Awk svnpenn / stdlib :
fuente
Como se mencionó en la respuesta anterior, puede hacer Binary to Decimal y Hexa Decimal de la siguiente manera en Bash usando echo e printf. Solo estoy agregando aquí cómo convertir de decimal y hexadecimal a binario usando Bash puro.
Binario a decimal usando echo
Binario a Hexa-Decimal usando printf
Conversión de entero decimal a binario usando solo Bash
Usando solo Bash, si desea convertir decimal a binario, puede hacerlo de la siguiente manera:
Y luego copie y pegue lo siguiente:
Y luego pruébalo desde donde guardaste:
¡Se debe agregar un entero!
Conversión hexadecimal a binaria usando solo Bash
Del mismo modo, hexadecimal a binario, de la siguiente manera usando solo bash:
Por ejemplo:
Hex debe ser pasado:
fuente