Non sono sicuro di aver compreso appieno, ma sembra che tu abbia un parser per questo formato binario e tu controlli il codice per esso. Quindi questa risposta si basa su tale presupposto.
Un parser riempirà in qualche modo strutture, classi o qualunque struttura di dati abbia la tua lingua. Se si implementa a ToString
per tutto ciò che viene analizzato, si finisce con un metodo molto facile da usare e di facile manutenzione per visualizzare quei dati binari in un formato leggibile dall'uomo.
Avresti essenzialmente:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
E questo è tutto, dal punto di vista del suo utilizzo. Ovviamente ciò richiede l'implementazione / sostituzione della ToString
funzione per la propria Object
classe / struttura / qualunque cosa, e dovreste anche farlo per qualsiasi classe / struttura / sistema annidata.
È inoltre possibile utilizzare un'istruzione condizionale per impedire che la ToString
funzione venga chiamata nel codice di rilascio in modo da non perdere tempo con qualcosa che non verrà registrato al di fuori della modalità di debug.
Il tuo ToString
sguardo potrebbe in questo modo:
return String.Format("%d,%d,%d,%d", int32var, int16var, int8var, int32var2);
// OR
return String.Format("%s:%d,%s:%d,%s:%d,%s:%d", varName1, int32var, varName2, int16var, varName3, int8var, varName4, int32var2);
La tua domanda originale sembra che tu abbia in qualche modo tentato di farlo e che pensi che questo metodo sia gravoso, ma a un certo punto hai anche implementato l'analisi di un formato binario e creato variabili per archiviare quei dati. Quindi tutto ciò che devi fare è stampare quelle variabili esistenti al livello appropriato di astrazione (la classe / struttura in cui si trova la variabile).
Questo è qualcosa che dovresti fare solo una volta e puoi farlo mentre costruisci il parser. E cambierà solo quando cambia il formato binario (che comunque richiederà già una modifica al tuo parser).
Allo stesso modo: alcune lingue hanno solide funzionalità per trasformare le classi in XML o JSON. C # è particolarmente bravo in questo. Non è necessario rinunciare al formato binario, è sufficiente eseguire XML o JSON in un'istruzione di registrazione di debug e lasciare da solo il codice di rilascio.
Personalmente consiglierei di non seguire la strada del dump esadecimale, perché è soggetto a errori (hai iniziato con il byte giusto, sei sicuro che quando leggi da sinistra a destra stai "vedendo" l'endianness corretta, ecc.) .
Esempio: dì le tue ToStrings
variabili di sputo a,b,c,d,e,f,g,h
. Esegui il tuo programma e noti un bug g
, ma il problema è iniziato davvero c
(ma stai eseguendo il debug, quindi non l'hai ancora capito). Se conosci i valori di input (e dovresti) vedrai immediatamente che c
è qui che iniziano i problemi.
Rispetto a una discarica esadecimale che ti dice solo 338E 8455 0000 FF76 0000 E444 ....
; se i tuoi campi hanno dimensioni variabili, da dove c
inizia e qual è il valore, un editor esadecimale ti dirà ma il mio punto è che questo è soggetto a errori e richiede tempo. Non solo, ma non puoi automatizzare facilmente / rapidamente un test tramite un visualizzatore esadecimale. Stampare una stringa dopo aver analizzato i dati ti dirà esattamente cosa sta "pensando" il tuo programma e sarà un passo lungo il percorso dei test automatizzati.