मुझे यकीन नहीं है कि मैं पूरी तरह से समझता हूं, लेकिन ऐसा लगता है कि आपके पास इस द्विआधारी प्रारूप के लिए एक पार्सर है, और आप इसके लिए कोड को नियंत्रित करते हैं। तो यह जवाब उस धारणा पर बनाया गया है।
एक पार्सर किसी भी तरह से आपकी भाषा की संरचना, वर्ग, या जो भी डेटा संरचना है, उसे भर रहा होगा। यदि आप ToString
उन सभी चीज़ों के लिए कार्यान्वित करते हैं जो पार्स हो जाती हैं, तो आप एक बाइनरी डेटा को मानव पठनीय प्रारूप में प्रदर्शित करने के लिए उपयोग करने के लिए बहुत आसानी से और आसानी से बनाए रखने की विधि के साथ समाप्त होते हैं।
आप अनिवार्य रूप से होगा:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
और वह यह है, इसका उपयोग करने के दृष्टिकोण से। बेशक इसके लिए आपको ToString
अपनी Object
कक्षा / संरचना / जो कुछ भी है, उसके लिए फ़ंक्शन को लागू करना / ओवरराइड करना होगा, और आपको किसी भी नेस्टेड वर्ग / स्ट्रक्चर / व्हाईवर्स के लिए भी ऐसा करना होगा।
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);
आपका मूल प्रश्न यह ध्वनि करता है जैसे आपने कुछ ऐसा करने का प्रयास किया है, और आपको लगता है कि यह विधि बोझ है, लेकिन आपने कुछ बिंदुओं पर एक द्विआधारी प्रारूप को लागू करने और उस डेटा को संग्रहीत करने के लिए चर भी बनाए हैं। तो आपको बस इतना करना होगा कि उन मौजूदा वेरिएबल्स को एब्स्ट्रैक्शन के उपयुक्त स्तर पर प्रिंट करें (वेरिएबल जिस क्लास / स्ट्रक्चर में है)।
यह कुछ ऐसा है जो आपको केवल एक बार करना चाहिए, और आप इसे पार्सर बनाते समय कर सकते हैं। और यह केवल तभी बदलेगा जब बाइनरी प्रारूप में परिवर्तन होगा (जो पहले से ही आपके पार्सर वैसे भी बदलाव का संकेत देगा)।
इसी तरह की नस में: कुछ भाषाओं में एक्सएमएल या जेएसएन में कक्षाएं बदलने की मजबूत विशेषताएं हैं। C # इस पर विशेष रूप से अच्छा है। आपको अपने द्विआधारी प्रारूप को छोड़ने की ज़रूरत नहीं है, आप बस XML या JSON को डिबग लॉगिंग स्टेटमेंट में करते हैं और अपने रिलीज़ कोड को अकेले छोड़ देते हैं।
मैं व्यक्तिगत रूप से हेक्स डंप मार्ग पर नहीं जाने की सलाह दूंगा, क्योंकि यह त्रुटियों से ग्रस्त है (क्या आपने सही बाइट पर शुरू किया था, क्या आप सुनिश्चित हैं कि जब आप बाएं से दाएं पढ़ रहे हैं तो आप सही धीरज, आदि "देख रहे हैं") ।
उदाहरण: अपने ToStrings
थूक को चर कहो a,b,c,d,e,f,g,h
। आप अपना प्रोग्राम चलाते हैं और बग को नोटिस करते हैं g
, लेकिन समस्या वास्तव में शुरू हुई c
(लेकिन आप डिबगिंग कर रहे हैं, इसलिए आपने अभी तक इसका पता नहीं लगाया है)। यदि आप इनपुट मान जानते हैं (और आपको चाहिए) तो आप तुरंत देखेंगे कि c
समस्याएँ कहाँ से शुरू होती हैं।
एक हेक्स डंप की तुलना में जो आपको बताता है 338E 8455 0000 FF76 0000 E444 ....
; यदि आपके क्षेत्र अलग-अलग आकार के हैं, तो कहां से c
शुरू होता है और क्या मूल्य है - एक हेक्स संपादक आपको बताएगा लेकिन मेरी बात यह है कि त्रुटि प्रवण और समय लेने वाली है। इतना ही नहीं, लेकिन आप आसानी से / जल्दी से एक हेक्स दर्शक के माध्यम से एक परीक्षण को स्वचालित नहीं कर सकते। डेटा को पार्स करने के बाद एक स्ट्रिंग प्रिंट करना आपको यह बताएगा कि आपका कार्यक्रम 'सोच' क्या है, और स्वचालित परीक्षण के मार्ग के साथ एक कदम होगा।