Je ne suis pas sûr de bien comprendre, mais il semble que vous ayez un analyseur pour ce format binaire et que vous en contrôliez le code. Donc, cette réponse est construite sur cette hypothèse.
Un analyseur remplira en quelque sorte les structures, les classes ou toute autre structure de données de votre langage. Si vous implémentez un ToString
pour tout ce qui est analysé, vous vous retrouvez avec une méthode très facile à utiliser et facilement maintenue pour afficher ces données binaires dans un format lisible par l'homme.
Vous auriez essentiellement:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
Et c'est tout, du point de vue de son utilisation. Bien sûr, cela vous oblige à implémenter / remplacer la ToString
fonction pour votre Object
classe / struct / quoi que ce soit, et vous devrez également le faire pour toutes les classes / structs / whatevers imbriquées.
Vous pouvez en outre utiliser une instruction conditionnelle pour empêcher la ToString
fonction d'être appelée dans le code de version afin de ne pas perdre de temps sur quelque chose qui ne sera pas enregistré en dehors du mode débogage.
Votre ToString
pourrait ressembler à ceci:
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);
Votre question d'origine donne l'impression que vous avez quelque peu tenté de le faire et que vous pensez que cette méthode est lourde, mais vous avez également à un moment donné implémenté l'analyse syntaxique d'un format binaire et créé des variables pour stocker ces données. Il vous suffit donc d'imprimer ces variables existantes au niveau d'abstraction approprié (la classe / structure dans laquelle se trouve la variable).
C'est quelque chose que vous ne devriez faire qu'une seule fois, et vous pouvez le faire tout en construisant l'analyseur. Et cela ne changera que lorsque le format binaire changera (ce qui entraînera déjà une modification de votre analyseur).
Dans la même veine: certains langages ont des fonctionnalités robustes pour transformer des classes en XML ou JSON. C # est particulièrement bon dans ce domaine. Vous n'avez pas à abandonner votre format binaire, vous faites simplement le XML ou JSON dans une instruction de journalisation de débogage et laissez votre code de version seul.
Je recommanderais personnellement de ne pas emprunter la route de vidage hexadécimal, car elle est sujette aux erreurs (avez-vous commencé sur le bon octet, êtes-vous sûr lorsque vous lisez de gauche à droite que vous "voyez" la bonne endianness, etc.) .
Exemple: dites vos ToStrings
variables crachées a,b,c,d,e,f,g,h
. Vous exécutez votre programme et remarquez un bogue avec g
, mais le problème a vraiment commencé avec c
(mais vous déboguez, donc vous ne l'avez pas encore compris). Si vous connaissez les valeurs d'entrée (et vous devriez), vous verrez instantanément que c
c'est là que les problèmes commencent.
Comparé à un vidage hexadécimal qui vous dit juste 338E 8455 0000 FF76 0000 E444 ....
; si vos champs sont de taille variable, où c
commence et quelle est la valeur - un éditeur hexadécimal vous le dira, mais mon point est que cela est sujet aux erreurs et prend du temps. Non seulement cela, mais vous ne pouvez pas automatiser facilement / rapidement un test via une visionneuse hexadécimale. L'impression d'une chaîne après avoir analysé les données vous dira exactement ce que votre programme «pense» et sera une étape sur la voie des tests automatisés.