J'ai un contexte où j'ai besoin de convertir le binaire en hexadécimal et décimal et vice-versa dans un script shell. Quelqu'un peut-il me suggérer un outil pour cela?
20
J'ai un contexte où j'ai besoin de convertir le binaire en hexadécimal et décimal et vice-versa dans un script shell. Quelqu'un peut-il me suggérer un outil pour cela?
Réponses:
Il est assez simple de faire la conversion à partir de binaire en bash pur (
echo
etprintf
sont intégrés):Binaire à décimal
Binaire à hexadécimal
Revenir au binaire en utilisant bash seul est un peu plus complexe, donc je vous suggère de voir les autres réponses pour trouver des solutions à cela.
la source
printf '%x\n' 10
, par exemple.printf %d
bin2dec?$(( ... ))
donne déjà un résultat décimal,echo
suffit.printf '%s\n' foo
au lieu deecho
pour diverses raisons (principalement la portabilité), pour la même raison, je ne l'utilise pas ici.echo
intégrée bien implémentée ). Ma faute!En supposant que par binaire, vous voulez dire des données binaires comme dans des données avec toute valeur d'octet possible, y compris 0, et non des nombres en base 2:
Pour convertir de binaire,
od
(standard),xxd
(livré avecvim
) ouperl
l »unpack
viennent à l' esprit.Maintenant, pour se reconvertir à binaire,
awk
(standard),xxd -r
ouperl
depack
:De la sortie décimale de
od -tu1
ouperl
au - dessus:Depuis l'hexa
perl
ouxxd -p
au - dessus:la source
Vous pouvez utiliser bc pour cela en manipulant les paramètres
ibase
etobase
:L'astuce est que vous devez être explicite sur les bases. Donc, si votre ibase est 2, alors si vous définissez votre obase sur 10, il ne fera rien, car 10 en binaire est 2. Par conséquent, vous devez utiliser la notation hexadécimale.
Donc binaire à décimal serait (attention à ce que obase soit A)
Binaire à décimal:
Binaire à hex:
Si la «base de sortie»
obase
est modifiée en premier, cela devrait être plus facile:la source
echo 'ibase=2;obase=F;1111
qui doit être égal à 15 décimal, c.-à-d. F en hex. Il apparaît comme 10, qu'il est en base 15 (chiffres 0-E). Il est également plus facile si vous déclarez la obase première , par exemple:echo 'obase=16;ibase=2;1111'|bc
. Pas de confusion.ibase
, vous devez fournir une entrée dans cette base, même pourobase
. Donc, dans votre exemple, ce seraitecho 'ibase=2;obase=10000;11110001011010'|bc
. Mieux vaut écouter les conseils de goldilocks et inverser l'ordre - premier setobase
, puisibase
.Si vous entendez convertir des nombres de base 2 en 10 ou 16 et inversement ,
bc
est l'outil standard pour le faire, comme déjà mentionné par psarossy .Certains shells comme
zsh
ont un support intégré pour la conversion de base dans le cadre de leurs opérateurs d'expansion arithmétique:etc.
Les deux
ksh93
etzsh
prennent également en charge:Mais notez que, une fois développé,
$binary
il aura un préfixe2#
ou16#
(avec lequel vous pouvez supprimer${binary#*#}
.ksh93
prend également en charge:pour convertir en binaire.
la source
Pour une utilisation binaire en hexadécimal: outil xxd sous linux et pour binaire en décimal, vous pouvez utiliser l'outil qalculate.
Pour obtenir de l'aide concernant le type xxd
xxd --help
ouman xxd
sous Linux.la source
Vous pouvez utiliser PHP:
Ou Perl:
Ou POSIX Awk svnpenn / stdlib :
la source
Comme mentionné dans la réponse précédente, vous pouvez faire du binaire en décimal et hexa décimal comme suit dans Bash en utilisant echo et printf. J'ajoute juste ici comment convertir de Decimal et Hex en binaire en utilisant du Bash pur.
Binaire à décimal en utilisant l'écho
Binaire en hexa-décimal en utilisant printf
Conversion décimale en binaire en utilisant uniquement Bash
En utilisant uniquement Bash, si vous souhaitez convertir des décimales en binaires, vous pouvez le faire comme suit:
Et puis copiez et collez les éléments suivants:
Et puis essayez-le d'où vous avez enregistré:
Un entier doit être ajouté !!
Conversion hexadécimale en binaire en utilisant uniquement Bash
De même, hexadécimal à binaire, comme suit en utilisant uniquement bash:
Par exemple:
L'hex doit être passé:
la source