Ich habe ein Java-Programm, das im hexadezimalen Format mit Leerzeichen getrennt 16 Byte des über das Netzwerk empfangenen Rohpakets ausspuckt. Da ich diesen Code nicht ändern möchte, übergebe ich das Ergebnis an ein Perl-Skript, das theoretisch von STDIN
in erkennbare Variablen unpack
kann. Das Folgende ist eine Probe von dem Line-Eingang meiner Perl-Datei:Wie kann ich Leerzeichen getrennte STDIN Hex-Strings analysieren, die in Perl entpackt sind?
FF FF 09 7D 10 01 07 01 00 02 00 1D 00 00 00 00 00 06 00 07 00 |--garbage-----|c--|c--|int---|int---|int---|int---|int---|int---|int---|
(c ist für char/Byte, int für die 16-Bit-Integer-Variable)
Ich wollte zunächst unpack
verwenden, um sauber jeden Eingang zu trennen Zeile in Variablen, die ich brauchte. Wegen der Leerzeichenbegrenzung in der Zeichenfolge bin ich jedoch nicht sicher, wie ich damit umgehen soll (ich kann 'A' als Vorlage verwenden, aber dann kann ich auch einfach split verwenden!)
Gibt es eine elegante Möglichkeit von unpack()
zu verwenden? Ich bin kein Perl-Master, aber der andere Weg ist, wie ich zuvor vorgeschlagen habe, split
zu verwenden und dann jedes hex manuell in ein Byte umzuwandeln und dann Bitmanipulationen und Masken zu verwenden, um zu bekommen, was ich will. Irgendwelche anderen Vorschläge (wenn unpack
nicht den Tag speichert)?
Sie können es hübscher aussehen lassen, indem Sie sagen: map {hex} split :) – friedo
Oder einfach nur 'map hex, split' - fast Haskell! –
tatsächlich habe ich bestätigt, dass die Bytes in Little Endian sind. wierd, wie sie über ein Netzwerk gesendet werden, hätte ich gedacht, dass das in Netzwerk-Reihenfolge hätte sein sollen. Naja, die einzige Änderung muss dann "x5C2n7" auspacken um "x5C2v7" zu entpacken, oder? Und danke für die Antwort ... dieses Forum ist super – intiha