मैं एक एलजेड 1/एलजेड 77 डीकंप्रेशन एल्गोरिदम इंजीनियर को रिवर्स करने का प्रयास कर रहा हूं। आउटपुट होने के लिए डीकोड बफर/विंडो के क्षेत्र की लंबाई एक चर लंबाई लंबाई पूर्णांक के रूप में फ़ाइल में एन्कोड किया गया है। मैंने वैरिएबल लम्बाई पूर्णांक एन्कोडिंग के बारे में जितना भी पढ़ा है और इस मामले में इस्तेमाल की जाने वाली विधि किसी अन्य व्यक्ति की तरह दिखाई नहीं दे रही है। शायद पेटेंट मुद्दों से बचने के लिए या शायद सिर्फ obfuscate करने के लिए। शामिल कोड काफी पूरा नहीं हो सकता है लेकिन यह इस बिंदु पर कम से कम कई फाइलों पर काम कर रहा है।परिवर्तनीय लंबाई पूर्णांक एन्कोडिंग
मैं नहीं देख सकता कि, अगर बिल्कुल, नीचे दिए गए सूत्रों को कुछ सरल में कम किया जा सकता है। अधिकांश परिवर्तनीय लंबाई पूर्णांक एन्कोडिंग एल्गोरिदम कुछ प्रकार के लूप का उपयोग करते हैं, लेकिन इसके लिए, मैं ऐसा करने में सक्षम नहीं हूं क्योंकि सूत्र प्रत्येक निबेल का मूल्यांकन करते समय सुसंगत प्रतीत नहीं होता है।
सुझावों की बहुत सराहना की जाती है।
private static int getLength(BitReader bitStream)
{
const int minSize = 2;
int length = 0;
byte nibble3, nibble2, nibble1;
nibble3 = bitStream.ReadNibble();
if (nibble3 >= 0xc)
{
nibble2 = bitStream.ReadNibble();
nibble1 = bitStream.ReadNibble();
if (nibble3 == 0xF & nibble2 == 0xF & nibble1 == 0xF) return -1;
if ((nibble3 & 2) != 0)
{
length = (((((nibble3 & 7) + 3) << 6) + 8)) +
((nibble2 & 7) << 3) + nibble1 + minSize;
}
else if ((nibble3 & 1) != 0)
{
length = (((nibble3 & 7) << 6) + 8) +
((((nibble2 & 7)) + 1) << 3) + nibble1 + minSize;
}
else
{
length = ((((nibble3 & 7) << 4) + 8)) +
((nibble2 & 7) << 4) + nibble1 + minSize;
}
}
else if ((nibble3 & 8) != 0)
{
nibble1 = bitStream.ReadNibble();
length = ((((nibble3 & 7) << 1) + 1) << 3) + nibble1 + minSize;
}
else
{
length = nibble3 + minSize;
}
return length;
}
क्या आपको इसे इंजीनियर करने की अनुमति है? – TFD
हां। यह मेरे डेटाबेस में मेरा डेटा है। मैं स्रोत डेटा को अलग नहीं कर रहा हूं, केवल अपने डेटा के साथ काम कर रहा हूं। –