से PHP में कम महत्वपूर्ण बिट प्राप्त करें मेरे पास हेक्स कोड वाला एक फ़ाइल है और मुझे फ़ाइल में प्रत्येक बाइट से कम से कम महत्वपूर्ण बिट्स प्राप्त करने की आवश्यकता है, उन्हें संयोजित करें, उन्हें 8 के समूहों में विभाजित करें और फिर बाइट्स को कन्वर्ट करें ASCII। मेरी समस्या एलएसबी को हर बाइट से निकालना है।हेक्स
हेक्स फ़ाइल इस तरह दिखता है (लेकिन है बहुत लंबे समय तक):
<?php
// Read file, remove spaces
$file = implode('', explode(' ', file_get_contents('vogel.hex')));
// Save LSB
$bits = array();
for ($i = 1; $i < strlen($file); ++$i)
{
$bits[] = $file[$i] & 1;
}
// Split LSB array into chunks of 8 bits.
$bytes = array_chunk($bits, 8);
// Implode byte arrays, convert to decimal, convert to ASCII.
foreach ($bytes as $byte)
{
echo chr(bindec(implode('', $byte)));
}
?>
मुझे लगता है कि बंटवारे और परिवर्तित हिस्सा सही ढंग से काम करना चाहिए, लेकिन:
58 00 00 1F 58 00 00 00 00 00 00 00 00 00 00 1C 22 23 1F 26 25 1E 2C 26 20 31 2B 22 38 2F 26 42 36 25 47 37 24 49 39 22
मेरे कोड इस तरह दिखता है मुझे लगता है कि मैंने एलएसबी निकालने पर गलती की है। क्या कोई उदाहरण दे सकता है कि मैं एलएसबी कैसे निकाल सकता हूं?
मैंने थोड़ा कोड संपादित किया, ताकि मैं स्थिति 1 पर बिट्स पढ़ना शुरू कर दूं। फिर दशमलव प्रतिनिधित्व ASCII रेंज के भीतर है और स्क्रिप्ट एक वास्तविक ASCII चरित्र आउटपुट करता है।
कोड केवल एक समय के उद्देश्य के लिए है, इसलिए मुझे गति या अच्छा परवाह नहीं है। लेकिन मेरे पास एक प्रश्न है। आप इंडेक्स 1 के साथ लूप क्यों शुरू करते हैं और क्या इससे कोई फर्क पड़ता है कि रिक्त स्थान अभी भी $ फ़ाइल स्ट्रिंग के अंदर हैं? –
उस समय मैंने अपना जवाब लिखा था कि आपका लूप 0 से शुरू हुआ था, और अनुमान लगाया गया था कि मुझे लूप परिभाषा में पूर्व-वृद्धि ('++ $ i') द्वारा फेंक दिया गया था। –