Ho un programma Java che sputa, in formato esadecimale separato da spazi, 16 byte di pacchetti non elaborati ricevuti in rete. Dal momento che non voglio cambiare quel codice, sto trasmettendo il risultato a uno script Perl che, in teoria, può semplicemente STDIN
in variabili riconoscibili da STDIN
. Il seguente è un esempio di linea di ingresso al mio file Perl:Come posso analizzare le stringhe esadecimali STDIN separate da spazio in Perl?
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 è char/byte, int per la variabile 16bit intero)
inizialmente ho voluto usare unpack
per separare nettamente ogni ingresso linea in variabili che avevo bisogno. Tuttavia, a causa del limite di spazio nella stringa, non sono sicuro di come gestirlo (posso usare 'A' come modello, ma potrei anche usare lo split!)
C'è un modo elegante di usare unpack()
? Non sono un master Perl, ma l'altro modo è, come ho suggerito prima, usare split
e poi convertire manualmente ciascun esagono in un byte, e quindi usare manipolazioni di bit e maschere per ottenere ciò che voglio. Qualche altro suggerimento (se unpack
non salva il giorno)?
Puoi farlo sembrare più carino dicendo 'map {hex} split' :) – friedo
O anche solo' map hex, split' - quasi Haskell! –
in realtà ho confermato che i byte sono in little endian. perché, essendo inviati su una rete, avrei pensato che avrebbe dovuto essere in ordine di rete. Oh beh, l'unico cambiamento deve essere decomprimere "x5C2n7" per decomprimere "x5C2v7", giusto? E grazie per la risposta ... questo forum è fantastico – intiha