Я не впевнений, що цілком розумію, але це здається, що у вас є аналізатор цього бінарного формату, і ви керуєте кодом. Отже, ця відповідь побудована на тому припущенні.
Аналізатор певним чином заповнить структури, класи або будь-яку структуру даних, якою володіє ваша мова. Якщо ви реалізуєте a ToString
для всього, що розбирається, тоді ви отримуєте дуже простий у використанні і легко підтримується спосіб відображення цих бінарних даних у читаному для людини форматі.
Ви по суті мали б:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
І це все, з точки зору його використання. Звичайно, це вимагає, щоб ви реалізували / переосмислювали ToString
функцію для свого Object
класу / struct / що завгодно, і вам також доведеться це робити для будь-яких вкладених класів / структур / whatevers.
Ви можете додатково використовувати умовний оператор, щоб запобігти виклику ToString
функції у коді випуску, щоб ви не витрачали час на те, що не буде зареєстровано поза режимом налагодження.
Ви ToString
можете виглядати так:
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);
У вашому первісному запитанні звучить так, що ви дещо намагалися це зробити, і ви вважаєте, що цей метод є обтяжливим, але ви також в якийсь момент реалізували розбір бінарного формату та створили змінні для зберігання цих даних. Отже, все, що вам потрібно зробити, - це надрукувати ці існуючі змінні на відповідному рівні абстракції (клас / структура змінної є).
Це те, що вам слід зробити лише один раз, і ви можете це зробити, будуючи парсер. І вона зміниться лише тоді, коли зміниться бінарний формат (який і без того підкаже змін у вашому парсері).
Аналогічно: деякі мови мають надійні функції для перетворення класів у XML або JSON. C # особливо добре в цьому. Вам не доведеться відмовлятися від бінарного формату, ви просто виконуєте XML або JSON у виписці з журналу налагодження і залишаєте код звільнення в спокої.
Я особисто рекомендую не їхати з шестигранним дамп-маршрутом, тому що він схильний до помилок (ви починали з правого байта, чи впевнені, читаючи зліва направо, що "бачите" правильну витримку тощо) .
Приклад: Скажіть, що ToStrings
виплюнули змінні a,b,c,d,e,f,g,h
. Ви запускаєте свою програму і помічаєте помилку g
, але проблема справді почалася c
(але ви налагоджуєте, так що ви ще цього не зрозуміли). Якщо ви знаєте вхідні значення (і вам слід), миттєво побачите, c
звідки починаються проблеми.
У порівнянні з шестигранним смітником, який просто вам каже 338E 8455 0000 FF76 0000 E444 ....
; якщо ваші поля різної величини, з чого c
починається і яке значення - шестнадцятковий редактор скаже вам, але, на мою думку, це схильність до помилок і затрата часу. Мало того, але ви не можете легко / швидко автоматизувати тест через шестигранний переглядач. Друк рядка після аналізу даних точно скаже вам, що ваша програма «думає», і буде одним кроком по шляху автоматизованого тестування.