Quel est un bon outil pour convertir ASCII en binaire et binaire en ASCII?
J'espérais quelque chose comme:
$ echo --binary "This is a binary message"
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Ou, plus réaliste:
$ echo "This is a binary message" | ascii2bin
01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
Et aussi l'inverse:
$ echo "01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101" | bin2ascii
This is a binary message
PS: j'utilise bash
PS2: J'espère que je n'ai pas eu le mauvais binaire
echo
.Réponses:
-e expression
évaluer l'expression donnée commeperl
code-p
:sed
mode. L' expression est évaluée pour chaque ligne d'entrée, le contenu de la ligne étant stocké dans la$_
variable et imprimé après l'évaluation de l' expression .-l
: encore plus commesed
: au lieu de la ligne complète, seul le contenu de la ligne (c'est-à-dire sans le délimiteur de ligne) est$_
dedans (et une nouvelle ligne est rajoutée en sortie). Fonctionne doncperl -lpe code
commesed code
sauf que c'est duperl
code par opposition aused
code.unpack "B*"
travaille sur la$_
variable par défaut et extrait son contenu sous la forme d'une chaîne de bits passant du bit le plus élevé du premier octet au bit le plus bas du dernier octet.pack
fait l'inverse deunpack
. Voirperldoc -f pack
pour plus de détails.Avec des espaces:
(il suppose que l'entrée est en blocs de 8 bits (avec 0 remplissage)).
Avec
unpack "(B8)*"
, nous extrayons 8 bits à la fois, et nous joignons les chaînes résultantes avec des espaces avecjoin " "
.la source
Vous pouvez utiliser
xxd
pour convertir en ASCII et binaire.Conversion de bases
Si vous cherchez à faire uniquement des conversions de base entre Hex, Octal et Dec, j'utilise généralement l'outil de ligne de commande de la calculatrice de base (
bc
) pour faire de telles choses. Notez quebc
c'est toujours très pointilleux sur l'ordre correct des bases: vous devez d'abord spécifier la base résultante (obase
), puis ajouter votre choix deibase
.la source
xxd
serait bien, sauf qu'il montre cette première colonne ennuyeuse et l'entrée de base à la fin de la ligne.awk
pour vous en débarrasser, mais il ne semble pas avoir de commutateurs pour désactiver cet affichage.| awk '{print $2}'
. Il existe également d'autres outils.od
&hexdump
. Je cherche une autre méthode en utilisant ceux-ci.-p
option pour obtenir une sortie "pure"xxd -b
approche moi-même, cependant, on ne peut pas utiliserxxd
seul pour reconvertir le binaire en ASCII. Pour le moment, je crains que vous ne deviez utiliser quelque chose commeprintf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r
, avec $ n contenant le nombre à convertir, soit comme une longue chaîne de chiffres, soit comme une chaîne de chiffres séparés par des points-virgules. Si vous pouvez garantir que $ n rentre dans le type arithmétique de vos coquilles, alors vous pouvez vous en sortir avecprintf '%x\n' $((2#$n)) | xxd -p -r
Utilisation de bc et bash:
la source
Solution de shell pour convertir le binaire en ascii:
la source
sed
,,tr
etbc
sont des programmes externes appelés dans le script shell.En Python
la source
Utilisation de Python 3:
Enregistré comme "bin2ascii" par exemple:
la source
Encodage binaire par base64
Base de décodage64
la source