Jakie jest dobre narzędzie do konwersji ASCII na binarne, a binarne na ASCII?
Miałem nadzieję na coś takiego:
$ 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
Lub bardziej realistycznie:
$ 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
A także odwrotnie:
$ 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: Używam bash
PS2: Mam nadzieję, że nie dostałem złego pliku binarnego
echo
.Odpowiedzi:
-e expression
oceń podane wyrażenie jakoperl
kod-p
:sed
tryb. Ekspresja jest obliczane dla każdej linii wejścia, z zawartością linii przechowywanej w$_
zmiennej i drukowanej po oceny ekspresji .-l
: jeszcze bardziej jaksed
: zamiast pełnego wiersza znajduje się tylko zawartość wiersza (to znaczy bez ogranicznika wiersza)$_
(i nowa linia jest dodawana z powrotem na wyjściu). Więcperl -lpe code
działa tak,sed code
że jest toperl
kod w przeciwieństwie dosed
kodu.unpack "B*"
$_
domyślnie działa na zmiennej i wyodrębnia jej zawartość jako ciąg bitów przechodzących od najwyższego bitu pierwszego bajtu do najniższego bitu ostatniego bajtu.pack
robi odwrotnośćunpack
. Zobaczperldoc -f pack
szczegóły.Ze spacjami:
(zakłada, że wejście jest w blokach po 8 bitów (wypełnienie 0).
Za pomocą
unpack "(B8)*"
wyodrębniamy 8 bitów na raz i łączymy powstałe ciągi ze spacjami za pomocąjoin " "
.źródło
Możesz użyć
xxd
do konwersji z ASCII i binarnego.Konwertowanie baz
Jeśli chcesz wykonać tylko podstawowe konwersje między Hex, Octal i Dec, zwykle używam podstawowego narzędzia wiersza poleceń kalkulatora (
bc
) do takich rzeczy. Zauważ, żebc
zawsze bardzo wybredna jest poprawna kolejność baz: najpierw musisz określić wynikową bazę (obase
), a następnie dodać swój wybóribase
.źródło
xxd
byłoby miło, z tym wyjątkiem, że pokazuje pierwszą irytującą kolumnę i wejście podstawowe na końcu wiersza.awk
się go pozbyć, ale wydaje się, że nie ma przełączników, aby wyłączyć ten ekran.| awk '{print $2}'
. Są też inne narzędzia.od
&hexdump
. Szukam innej metody przy użyciu tych.-p
opcji, aby uzyskać „czysty” wynikxxd -b
podejścia, jednak nie można używać goxxd
samego do konwersji pliku binarnego z powrotem na ASCII. Todo więc, obawiam się, że musiałbyś użyć czegoś takiegoprintf 'obase=16;ibase=2;%s\n' "$n" | bc | xxd -p -r
, z $ n zawierającym liczbę do konwersji, albo jako długi ciąg cyfr, albo ciąg cyfr oddzielonych średnikami. Jeśli możesz zagwarantować, że $ n pasuje do typu arytmetycznego twoich pocisków, możesz uciecprintf '%x\n' $((2#$n)) | xxd -p -r
Używanie bc i bash:
źródło
Rozwiązanie powłoki do konwersji pliku binarnego na ascii:
źródło
sed
,tr
ibc
są programami zewnętrznymi wywoływanymi w skrypcie powłoki.W Pythonie
źródło
Za pomocą Python 3:
Zapisane jako „bin2ascii” na przykład:
źródło
Kodowanie binarne przez base64
Dekodowanie base64
źródło