No estoy seguro de entender completamente, pero parece que tienes un analizador para este formato binario y controlas el código. Entonces esta respuesta se basa en esa suposición.
Un analizador de alguna manera llenará estructuras, clases o cualquier estructura de datos que tenga su lenguaje. Si implementa un ToString
para todo lo que se analiza, entonces termina con un método muy fácil de usar y fácil de mantener para mostrar esos datos binarios en un formato legible para humanos.
Esencialmente tendrías:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
Y eso es todo, desde el punto de vista de usarlo. Por supuesto, esto requiere que implemente / anule la ToString
función para su Object
clase / estructura / lo que sea, y también tendría que hacerlo para cualquier clase / estructura / estructura anidada.
También puede usar una declaración condicional para evitar que se invoque la ToString
función en el código de lanzamiento para que no pierda el tiempo en algo que no se registrará fuera del modo de depuración.
Tu ToString
podría verse así:
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);
Su pregunta original hace que parezca que ha intentado hacer esto, y que cree que este método es oneroso, pero que en algún momento también implementó el análisis de un formato binario y creó variables para almacenar esos datos. Entonces, todo lo que tiene que hacer es imprimir esas variables existentes en el nivel apropiado de abstracción (la clase / estructura en la que se encuentra la variable).
Esto es algo que solo debe hacer una vez, y puede hacerlo mientras construye el analizador. Y solo cambiará cuando cambie el formato binario (que de todos modos ya provocará un cambio en su analizador).
En una línea similar: algunos lenguajes tienen características robustas para convertir clases en XML o JSON. C # es particularmente bueno en esto. No tiene que renunciar a su formato binario, solo hace el XML o JSON en una declaración de registro de depuración y deja solo su código de lanzamiento.
Yo personalmente recomendaría no ir a la ruta de volcado hexadecimal, ya que es propenso a errores (si comenzaste en el byte derecho, ¿estás seguro cuando estás leyendo de izquierda a derecha que estás "viendo" la endianness correcta, etc.) .
Ejemplo: Di tus ToStrings
variables de escupir a,b,c,d,e,f,g,h
. Ejecutas tu programa y notas un error g
, pero el problema realmente comenzó c
(pero estás depurando, por lo que aún no lo has descubierto). Si conoce los valores de entrada (y debería hacerlo), verá instantáneamente que c
allí comienzan los problemas.
En comparación con un volcado hexadecimal que simplemente te dice 338E 8455 0000 FF76 0000 E444 ....
; si sus campos varían de tamaño, dónde c
comienza y cuál es el valor, un editor hexadecimal le dirá, pero mi punto es que esto es propenso a errores y consume mucho tiempo. No solo eso, sino que no puede automatizar fácil / rápidamente una prueba a través de un visor hexadecimal. Imprimir una cadena después de analizar los datos le dirá exactamente qué está 'pensando' su programa, y será un paso en el camino de las pruebas automatizadas.