Forum: PC-Programmierung Linux Komandozeile (awk etc) Hex zu Bin in Textdatei


von 🍅🍅 🍅. (tomate)


Lesenswert?

Vielleicht kann mir jemand schnell helfen, geht drum folgenden hex-Text 
in gleichlangen (mit 0 verlängerten) bin-txt zu wandeln:
Hex:
1
E6994
2
E6995
3
E6996
4
E6997
5
E6998
6
...
Bin (sollte immer gleichlang sein):
1
11110101110101101000
2
11110101110101101001
3
11110101110101101010
4
11110101110101101011
5
...

Mein awk-script, welches aber irgendwie keine neuen Zeilen erkennen will 
(bin vermutlich zu doof):
1
awk 'BEGIN {
2
FS = ""
3
RS = ""
4
a["F"]="1111"
5
a["E"]="1110"
6
a["D"]="1101"
7
a["C"]="1100"
8
a["B"]="1011"
9
a["A"]="1010"
10
a["9"]="1001"
11
a["8"]="1000"
12
a["7"]="0111"
13
a["6"]="0110"
14
a["5"]="0101"
15
a["4"]="0100"
16
a["3"]="0011"
17
a["2"]="0010"
18
a["1"]="0001"
19
a["0"]="0000"
20
a["\n"]="\n"
21
}
22
{
23
for (i=1;i<=FS;i++) printf a[$i]; 
24
}' < hex.txt > bin.txt


Hex-Dateien stammen aus HP-16500C Logikanalyzer und ist der 
Input-Pattern/Output eines PAL20L8, welches ich gerne dem 
Espresso-Logikknacker füttern würde. (müsste dazu eben in bin sein)

Wenn man das Format am HP-LA vorher auf binär umstellt, bekommt man die 
Daten sogar direkt als bin. Nur hab ich das dummerweise anfänglich nicht 
gemacht. Vermutlich ist der betreffende Chip auch hinüber, aber ich 
würde gern noch die alten (als Hex ausgelesenen) Daten testen, bevor ich 
den Chip definitiv als tot erkläre.

Danke für die Hilfe

: Bearbeitet durch User
von Kommandozeile vor dem Frühstück für Alle! (Gast)


Lesenswert?

1
cat hexzeilen.txt ¦ while read h
2
    do
3
        bc <<< "ibase=16; obase=2; $h"
4
    done

Schnellschuss aus d. Ärmel, ungeprüft

von Pizza Hawaii oridschinale (Gast)


Lesenswert?

man hd
man hexdump
man od
man perl pack unpack

von 🍅🍅 🍅. (tomate)


Lesenswert?

Skript, welches funktioniert:
1
awk 'BEGIN {
2
FS = ""
3
a["F"]="1111"
4
a["E"]="1110"
5
a["D"]="1101"
6
a["C"]="1100"
7
a["B"]="1011"
8
a["A"]="1010"
9
a["9"]="1001"
10
a["8"]="1000"
11
a["7"]="0111"
12
a["6"]="0110"
13
a["5"]="0101"
14
a["4"]="0100"
15
a["3"]="0011"
16
a["2"]="0010"
17
a["1"]="0001"
18
a["0"]="0000"
19
}
20
{
21
getline < "hex.txt"; for (i=1;i<=length($0);i++)  printf a[($i)]; print ""
22
}' hex.txt > bin.txt

von Md M. (Firma: Potilatormanufaktur) (mdma)


Lesenswert?

Deine Beispieldaten:
> E6994
> E6995
> E6996
> E6997
> E6998
> ...

Was du daraus machen wolltest:
> 11110101110101101000
> 11110101110101101001
> 11110101110101101010
> 11110101110101101011
> ...

Ergebnis deines Skripts:
> 11100110100110010100
> 11100110100110010101
> 11100110100110010110
> 11100110100110010111
> 11100110100110011000

Da stimmte was in deiner Frage einfach nicht.

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.