আমি নিশ্চিত যে আমি পুরোপুরি বুঝতে পেরেছি না, তবে মনে হয় আপনার কাছে এই বাইনারি ফর্ম্যাটটির পার্সার রয়েছে এবং আপনি এটির জন্য কোডটি নিয়ন্ত্রণ করেন। সুতরাং এই উত্তরটি সেই অনুমানের উপর নির্মিত।
কোনও পার্সার কোনও উপায়ে স্ট্রাক্ট, ক্লাস বা আপনার ভাষার যে কোনও ডেটা স্ট্রাকচার রয়েছে তা পূরণ করবে। যদি আপনি 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);
আপনার আসল প্রশ্নটি এটিকে শব্দ করার মতো করে তোলে যা আপনি কিছুটা চেষ্টা করার চেষ্টা করেছেন এবং আপনি মনে করেন যে এই পদ্ধতিটি বোঝাজনক তবে আপনি কোনও সময়ে বাইনারি ফর্ম্যাটকে পার্সিং করে প্রয়োগ করেছেন এবং সেই ডেটা সংরক্ষণ করার জন্য ভেরিয়েবল তৈরি করেছেন। সুতরাং আপনাকে যা করতে হবে তা হ'ল বিমূর্ততার উপযুক্ত স্তরে (বিদ্যমান ভেরিয়েবলটি শ্রেণি / কাঠামোর মধ্যে থাকা কাঠামোতে) মুদ্রণ করতে হবে।
এটি এমন কিছু যা আপনার কেবল একবারে করা উচিত এবং আপনি পার্সার তৈরি করার সময় এটি করতে পারেন। এবং এটি কেবল তখনই পরিবর্তিত হবে যখন বাইনারি ফর্ম্যাট পরিবর্তিত হবে (যা ইতিমধ্যে আপনার পার্সারে পরিবর্তনের অনুরোধ জানাবে)।
অনুরূপ শিরাতে: কিছু ভাষায় এক্সএমএল বা জেএসএন-তে ক্লাসগুলি পরিবর্তনের জন্য শক্তিশালী বৈশিষ্ট্য রয়েছে। সি # এটি বিশেষত ভাল। আপনাকে আপনার বাইনারি ফর্ম্যাটটি ছেড়ে দিতে হবে না, আপনি কেবল ডিবাগ লগিং স্টেটমেন্টে এক্সএমএল বা জেএসএন করেন এবং আপনার প্রকাশের কোডটি একা রেখে যান।
আমি ব্যক্তিগতভাবে হেক্স ডাম্প রুটে না যাওয়ার পরামর্শ দিই, কারণ এটির ত্রুটি হওয়ার আশঙ্কা রয়েছে (আপনি কি ডান বাইটে শুরু করেছিলেন, আপনি যখন নিশ্চিত হন যে আপনি বাম থেকে ডান পড়ছেন তখনই আপনি সঠিক ইন্ডিয়ানেশনটি "দেখছেন" ইত্যাদি) ।
উদাহরণ: আপনার ToStrings
থুতু ভেরিয়েবল বলুন a,b,c,d,e,f,g,h
। আপনি আপনার প্রোগ্রামটি চালাচ্ছেন এবং এর সাথে একটি ত্রুটি লক্ষ্য করুন g
, তবে সমস্যাটি সত্যিই শুরু হয়েছিল c
(তবে আপনি ডিবাগ করছেন, সুতরাং আপনি এখনও এটি বুঝতে পারেন নি)। আপনি যদি ইনপুট মানগুলি (এবং আপনার হওয়া উচিত) জানেন তবে আপনি তাত্ক্ষণিকভাবে দেখতে পাবেন c
যেখান থেকেই সমস্যা শুরু হয়।
হেক্স ডাম্পের সাথে তুলনা করুন যা আপনাকে কেবল বলে দেয় 338E 8455 0000 FF76 0000 E444 ....
; যদি আপনার ক্ষেত্রগুলি আকারের আকার পরিবর্তিত হয়, কোথা থেকে c
শুরু হয় এবং মানটি কী হয় - একটি হেক্স সম্পাদক আপনাকে বলবে তবে আমার বক্তব্যটি হ'ল এটি ত্রুটি প্রবণ এবং সময়সাপেক্ষ। কেবল তা-ই নয়, আপনি কোনও হেক্স দর্শকের মাধ্যমে সহজেই / দ্রুত কোনও পরীক্ষা স্বয়ংক্রিয় করতে পারবেন না। ডেটা বিশ্লেষণের পরে একটি স্ট্রিং প্রিন্ট করা আপনাকে জানাবে যে আপনার প্রোগ্রামটি 'চিন্তাভাবনা' ঠিক কী, এবং স্বয়ংক্রিয় পরীক্ষার পথে এক ধাপ।