Tam olarak anladığımdan emin değilim, ancak bu ikili biçim için bir ayrıştırıcıya sahip olduğunuz ve bunun kodunu kontrol ettiğiniz gibi görünüyor. Yani bu cevap bu varsayım üzerine kuruludur.
Ayrıştırıcı bir şekilde yapıları, sınıfları veya dilinizin sahip olduğu veri yapısını doldurur. ToString
Ayrıştırılan her şey için bir uygularsanız , o zaman ikili verileri okunabilir bir formatta görüntülemek için kullanımı çok kolay ve bakımı kolay bir yöntemle sonuçlanırsınız.
Temelde:
byte[] arrayOfBytes; // initialized somehow
Object obj = Parser.parse(arrayOfBytes);
Logger.log(obj.ToString());
Ve bu, onu kullanmak açısından. Tabii ki bu ToString
, Object
sınıfınız / struct / whatınız için fonksiyonu uygulamanızı / geçersiz kılmanızı gerektirir ve bunu ayrıca iç içe sınıflar / struct / whatevers için de yapmanız gerekir.
Ayrıca ToString
, hata ayıklama modunun dışında günlüğe kaydedilmeyecek bir şey için zaman kaybetmemeniz için, işlevin sürüm kodunda çağrılmasını önlemek için koşullu bir deyim kullanabilirsiniz .
Sizin ToString
böyle kudreti bakış:
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);
Orijinal sorunuz, bunu yapmaya çalıştığınız gibi geliyor ve bu yöntemin külfetli olduğunu düşünüyorsunuz, ancak bir noktada ikili bir format ayrıştırma uyguladınız ve bu verileri depolamak için değişkenler oluşturdunuz. Tek yapmanız gereken mevcut değişkenleri uygun soyutlama seviyesinde (değişkenin bulunduğu sınıf / yapı) yazdırmaktır.
Bu, yalnızca bir kez yapmanız gereken bir şeydir ve ayrıştırıcıyı oluştururken yapabilirsiniz. Ve sadece ikili biçim değiştiğinde değişecektir (bu zaten ayrıştırıcıda zaten bir değişiklik isteyecektir).
Benzer bir şekilde: bazı diller sınıfları XML veya JSON'a dönüştürmek için güçlü özelliklere sahiptir. C # bu konuda özellikle iyidir. İkili biçiminizden vazgeçmek zorunda değilsiniz, XML veya JSON'u bir hata ayıklama günlüğü deyiminde yaparsınız ve sürüm kodunuzu yalnız bırakırsınız.
Kişisel olarak onaltılık döküm yoluna gitmemenizi tavsiye ederim, çünkü hatalara yatkın (sağ baytta başladınız mı, soldan sağa doğru okurken doğru endianlığı vb. Gördüğünüzden emin misiniz) .
Örnek: ToStrings
Tükürük değişkenlerinizi söyleyin a,b,c,d,e,f,g,h
. Programınızı çalıştırırsınız ve bir hata fark edersiniz g
, ancak sorun gerçekten başladı c
(ancak hata ayıklama yapıyorsunuz, bu yüzden henüz çözemediniz). Giriş değerlerini biliyorsanız (ve yapmalısınız) anında c
sorunların başladığı yeri göreceksiniz .
Size söyleyen bir altıgen dökümü ile karşılaştırıldığında 338E 8455 0000 FF76 0000 E444 ....
; alanlarınız boyut olarak değişirse, nerede c
başlar ve değer nedir - bir hex editörü size söyleyecektir, ancak benim açımdan bu hataya eğilimli ve zaman alıcıdır. Sadece bu da değil, bir hex görüntüleyici aracılığıyla testi kolayca / hızlı bir şekilde otomatik hale getiremezsiniz. Verileri ayrıştırdıktan sonra bir dize yazdırmak, programınızın tam olarak ne düşündüğünü söyleyecektir ve otomatik test yolunda bir adım olacaktır.