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 (
echoyprintfson 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 %dpara bin2dec?$(( ... ))Ya da un resultado decimal,echoes suficiente.printf '%s\n' foolugar deechopor una variedad de razones (principalmente portabilidad), por la misma razón, no lo uso aquí.echointegrada 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'sunpackvienen a la mente.Ahora, para volver a convertir a binario,
awk(estándar)xxd -roperl'spack:De la salida decimal de
od -tu1operlsuperior:Del hexa
perloxxd -psuperior:fuente
Puede usar bc para esto manipulando los parámetros
ibaseyobase: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'
obasese cambia primero, debería ser más fácil:fuente
echo 'ibase=2;obase=F;1111cuá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,
bces la herramienta estándar para hacer eso como ya lo mencionó psarossy .Algunos shells como
zshtienen soporte incorporado para conversión de base como parte de sus operadores de expansión aritmética:y así.
Ambos
ksh93yzshtambién apoyan:Pero tenga en cuenta que, cuando se expande,
$binarytendrá un prefijo2#o16#(que puede eliminar${binary#*#}.ksh93tambié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 --helpoman xxden 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