हेक्सडम्प बनाम वास्तविक फ़ाइल सामग्री


16

जब मुझे hexdump filename.txtआउटपुट के रूप में निम्नलिखित मिलता है:

00000000 ac5a 5afb c08d 5d15 26d0 2491 e8c9 8917
00000010 

जब मुझे यह <?= bin2hex(file_get_contents('filename.txt')); ?>मिलता है:

5aacfb5a8dc0155dd0269124c9e81789

तो क्यों हेक्सडंप सुझाव दे रहा है कि सामग्री ac5a5afbc08d5d1526d02491e8c98917तब होनी चाहिए जब PHP सुझाव दे रहा है कि उन्हें होना चाहिए 5aacfb5a8dc0155dd0269124c9e81789? क्या मैं अभी हेक्सडंप के आउटपुट की सही व्याख्या नहीं कर रहा हूं?


जवाबों:


24

अंतर बड़ा-एंडियन बनाम थोड़ा-एंडियन ऑर्डर है

हेक्सडम्प आउटपुट के पहले चार बाइट्स के साथ शुरू करें ac5a 5afb:। अब बाइट ऑर्डर को पाने के लिए स्विच करें:

5aac fb5a

PHP आउटपुट के साथ इसकी तुलना करें:

5aac fb5a

उनका मिलान होता है।

डिफ़ॉल्ट रूप से, बीएसडी hexdumpमशीन के एंडियननेस के आधार पर आउटपुट प्रदर्शित करता है। यदि आप ऐसा नहीं चाहते हैं, तो आप -Cशब्द-दर-शब्द के बजाय बाइट-बाइट प्राप्त करने का विकल्प निर्दिष्ट कर सकते हैं :

$ hexdump filename.txt 
0000000 ac5a 5afb c08d 5d15 26d0 2491 e8c9 8917
0000010
$ hexdump -C filename.txt 
00000000  5a ac fb 5a 8d c0 15 5d  d0 26 91 24 c9 e8 17 89  |Z..Z...].&.$....|
00000010

4
एक बिट जोड़ने के लिए: हेक्सडंप सोलह-बिट शब्दों के रूप में व्याख्या किए गए डेटा दिखा रहा है। Bin2hex एक बार में एक बाइट दिखा रहा है, जैसा कि ASCII वर्ण या समान के लिए उपयुक्त होगा। X86 और x64 (और अन्य छोटे-एंडियन सीपीयू) पर, मल्टी-बाइट पूर्णांक के पहले बाइट में कम से कम महत्वपूर्ण बिट्स होते हैं। इसलिए यदि आपकी फ़ाइल में पहली चीज़ 16-बिट पूर्णांक वाली थी जिसमें मान 1 था, तो इसे बाइट के रूप में प्रदर्शित करना 01 00 दिखाएगा, लेकिन इसे 16-बिट शब्द के रूप में प्रदर्शित करने पर 0001 दिखाई देगा (प्राकृतिक पढ़ने का क्रम, दाईं ओर LSB, जैसा कि हम दशमलव संख्या के रोजमर्रा के उपयोग में करते हैं)। en.wikipedia.org/wiki/Endianness
Jamie Hanrahan

@ JamieHanrahan की टिप्पणी को जोड़ने के लिए, पढ़ें: "और अन्य सभी छोटे-एंडियन सीपीयू", क्योंकि यह एंडियननेस का बहुत बिंदु है।
ग्लोगल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.