it-swarm.com.de

ASCII zu Binär und Binär zu ASCII Konvertierungswerkzeuge?

Welches ist ein gutes Werkzeug, um ASCII in Binär und Binär in ASCII zu konvertieren?

Ich hatte auf etwas gehofft wie:

$ 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

Oder realistischer:

$ 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

Und auch umgekehrt:

$ 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: Ich benutze Bash

PS2: Ich hoffe ich habe nicht die falsche Binärdatei bekommen

33
RSFalcon7
$ echo AB | Perl -lpe '$_=unpack"B*"'
0100000101000010
$ echo 0100000101000010 | Perl -lpe '$_=pack"B*",$_'
AB
  • -e expression Wertet den angegebenen Ausdruck als Perl Code aus
  • -p: sed Modus. Der Ausdruck wird für jede Eingabezeile ausgewertet, wobei der Inhalt der Zeile in der Variablen $_ Gespeichert und nach der Auswertung des Ausdruck gedruckt wird.
  • -l: Noch mehr wie sed: Anstelle der vollständigen Zeile befindet sich nur das Inhalt der Zeile (dh ohne das Zeilenbegrenzer) in $_ (Und bei der Ausgabe wird wieder eine neue Zeile hinzugefügt). Perl -lpe code Funktioniert also wie sed code, Nur dass es sich um Perl Code im Gegensatz zu sed Code handelt.
  • unpack "B*" Arbeitet standardmäßig mit der Variablen $_ Und extrahiert ihren Inhalt als Bitfolge, die vom höchsten Bit des ersten Bytes zum niedrigsten Bit des letzten Bytes geht.
  • pack macht das Gegenteil von unpack. Siehe perldoc -f pack Für Details.

Mit Leerzeichen:

$ echo AB | Perl -lpe '$_=join " ", unpack"(B8)*"'
01000001 01000010
$ echo 01000001 01000010 | Perl -lape '$_=pack"(B8)*",@F'
AB

(Es wird davon ausgegangen, dass die Eingabe in 8-Bit-Blöcken (0-gepolstert) erfolgt.).

Mit unpack "(B8)*" extrahieren wir jeweils 8 Bits und verbinden die resultierenden Zeichenfolgen mit Leerzeichen mit join " ".

37

Sie können xxd verwenden, um von ASCII und binär) zu konvertieren.

$ echo -n "A" | xxd -b
0000000: 01000001                                               A

$ echo -n "A" | xxd -b | awk '{print $2}'
01000001

Basen umbauen

Wenn Sie nur Basis-Konvertierungen zwischen Hex, Octal und Dec durchführen möchten, verwende ich normalerweise das grundlegende Befehlszeilen-Tool des Taschenrechners (bc), um solche Dinge zu tun. Beachten Sie, dass bc immer sehr wählerisch in Bezug auf die richtige Reihenfolge der Basen ist: Sie müssen zuerst die resultierende Basis (obase) angeben, dann fügen Sie Ihre Auswahl von hinzu ibase.

$ echo "obase=2; ibase=16; A" | bc
1010

$ echo "obase=16; ibase=2; 1010" | bc
A
23
slm

Mit bc und bash:

#!/bin/bash

chrbin() {
        echo $(printf \\$(echo "ibase=2; obase=8; $1" | bc))
}

ordbin() {
  a=$(printf '%d' "'$1")
  echo "obase=2; $a" | bc
}

ascii2bin() {
    echo -n $* | while IFS= read -r -n1 char
    do
        ordbin $char | tr -d '\n'
        echo -n " "
    done
}

bin2ascii() {
    for bin in $*
    do
        chrbin $bin | tr -d '\n'
    done
}
ascii2bin "This is a binary message"
bin2ascii 01010100 01101000 01101001 01110011 00100000 01101001 01110011 00100000 01100001 00100000 01100010 01101001 01101110 01100001 01110010 01111001 00100000 01101101 01100101 01110011 01110011 01100001 01100111 01100101
8

Shell-Lösung zum Konvertieren von Binärdateien in ASCII:

bin2ascii() { { tr -cd 01 | fold -w8; echo; } | sed '1i obase=8; ibase=2' | bc | sed 's/^/\\/' | tr -d '\n' | xargs -0 echo -e; }
5
n.caillou

In Python

Für ASCII Zeichen im Bereich [ -~] on Python 2:

>>> import binascii
>>> bin(int(binascii.hexlify('hello'), 16))
'0b110100001100101011011000110110001101111'

Rückwärts:

>>> n = int('0b110100001100101011011000110110001101111', 2)
>>> binascii.unhexlify('%x' % n)
'hello'

In Python 3.2+:

>>> bin(int.from_bytes('hello'.encode(), 'big'))
'0b110100001100101011011000110110001101111'

Rückwärts:

>>> n = int('0b110100001100101011011000110110001101111', 2)
>>> n.to_bytes((n.bit_length() + 7) // 8, 'big').decode()
'hello'
4
serv-inc

Verwenden von Python 3:

#!/usr/bin/env python3

import sys


if __name__ == "__main__":
    if len(sys.argv) != 1 and len(sys.argv) <= 3:
        if sys.argv[1] in ('-b', '--binary'):
            n = int(sys.argv[2].replace(' ', ''), 2)
            print(n.to_bytes((n.bit_length() + 7) // 8, 'big').decode())
        if sys.argv[1] in ('-a', '--ascii'):
            print((bin(int.from_bytes(sys.argv[2].encode(), 'big')))[2:])
    else:
        print("Example: decode -b '10000001'")

Als "bin2ascii" gespeichert zum Beispiel:

$ bin2ascii -a "Hello, world!"
1001000011001010110110001101100011011110010110000100000011101110110111101110010011011000110010000100001

$ bin2ascii -b 1001000011001010110110001101100011011110010110000100000011101110110111101110010011011000110010000100001  
Hello, world!
2
Vishtar

Binärcodierung durch base64

$ echo "This is a binary message" | base64
VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==

Decodieren von base64

$ echo "VGhpcyBpcyBhIGJpbmFyeSBtZXNzYWdlCg==" | base64 -d
This is a binary message
0
Like