जब आप पाठ संपादक के साथ एक बाइनरी फ़ाइल खोलते हैं तो आपको बाइनरी कोड क्यों नहीं दिखता है?


51

जब आप पाठ संपादक के साथ एक बाइनरी फ़ाइल खोलते हैं तो आपको बाइनरी कोड क्यों नहीं दिखता है? उदाहरण के लिए, जब मैं टेक्स्ट एडिटर के साथ एक छवि खोलता हूं, तो मुझे कुछ अजीब चरित्र और कुछ मानव पठनीय चरित्र दिखाई देते हैं; लेकिन छवि को बाइनरी में एन्कोड किया जाना चाहिए।


8
यह आपको क्या उम्मीद है? आपको क्या लगता है कि इसे कैसे संग्रहीत किया जाना चाहिए?
निकोडेमस आरआईपी

2
मुझे आश्चर्य है कि क्यों अधिक संपादक द्विआधारी कच्चे ASCII 1/0 अनुक्रम के रूप में बाइनरी की पेशकश नहीं करते हैं।
Xeoncross

7
@ एक्सनोक्रॉस: क्योंकि कच्चा 0/1 अनुक्रम बेकार है, यह मैनुअल डिकोडिंग के लिए बहुत ही लापरवाह है क्योंकि वे स्क्रीन स्पेस की एक बड़ी राशि लेते हैं; हेक्स प्रदर्शन आमतौर पर मैनुअल डिकोडिंग के लिए अधिक बेहतर होता है। और कुछ प्रशिक्षण के साथ, आप हेक्स को बाइनरी और इसके विपरीत जल्दी और आसानी से अनुवाद कर सकते हैं।
रेयान

3
@ फ़िस्को लैब्स: पेडेंट्री: दो अंकों के साथ एक हेक्स संख्या - 00 से एफएफ, जो दशमलव 0 - 255 (8 बिट्स 2 ^ 8 = 256 संभावित राज्यों का प्रतिनिधित्व करता है) में अनुवाद करता है।
पिस्कवेर

1
@ मिसकॉपी - जितना मैंने किया उससे बेहतर रखने के लिए धन्यवाद। deadbeef रिकॉर्ड के लिए 8 अंकों के साथ एक हेक्स संख्या है। ; ^)
Fiasco Labs

जवाबों:


83

बाइनरी और टेक्स्ट डेटा को अलग नहीं किया गया है: वे केवल डेटा हैं । यह उस व्याख्या पर निर्भर करता है जो उन्हें एक या दूसरे बनाती है। यदि आप किसी पाठ संपादक में बाइनरी डेटा (जैसे कि एक छवि फ़ाइल) खोलते हैं, तो इसका कोई मतलब नहीं होगा, क्योंकि यह आपकी चुनी हुई व्याख्या (पाठ के रूप में) में फिट नहीं बैठता है ।

जिसे आप पाठ कहते हैं , वह संभावित फ़ाइल सामग्री का एक सबसेट है: डेटा जो दिए गए वर्ण सेट में पठनीय वर्णों में बदल जाता है।

उदाहरण के लिए, ASCII में , आप देख सकते हैं कि, 128 "अनुमत" मानों में से केवल लगभग आधे अक्षर और संख्याएँ हैं, 30 विराम चिह्न हैं, और बाकी नियंत्रण वर्ण हैं । उत्तरार्द्ध समूह का उपयोग केवल पाठ फ़ाइलों में बहुत अधिक नहीं किया जाता है, और उनके पास वास्तव में कोई अच्छा पाठ प्रतिनिधित्व नहीं है। उनमें से कुछ टैब और न्यूलाइन वर्ण हैं, जहां पाठ संपादकों को पहले से ही उन्हें प्रदर्शित करने में रचनात्मक होने की आवश्यकता है।

कुछ पाठ संपादकों के पास व्हाट्सएप को स्पष्ट रूप से प्रदर्शित करने के विकल्प हैं। फिर वे वास्तव में अपने नियमित स्वरूपण व्यवहार (जो इन पात्रों की व्याख्या भी है ) के अलावा, पात्रों के रूप में तैयार किए जाएंगे ।

शुद्ध ASCII केवल 128 मानों की व्याख्या करता है। इस जानकारी को संग्रहीत करने के लिए उपयोग किए जाने वाले बाइट्स में प्रत्येक में 256 संभावित मान हैं, इसलिए संभव मानों में से आधे को ASCII में अनुमति नहीं है। जैसे कि क्षेत्र-विशिष्ट वर्ण सेटों में उपयोग किया जाता है, जैसे कि लैटिन 1, लेकिन ASCII में, वे अपरिभाषित हैं। उनके पास एक पाठ दर्शक में कोई उपयोगी प्रतिनिधित्व नहीं है जो केवल ASCII को संभाल सकता है।


बाइनरी डेटा को आमतौर पर टेक्स्ट के रूप में व्याख्या नहीं किया जाता है। तो इन फ़ाइलों में, सभी संभावित बाइट मान आमतौर पर पाए जाते हैं। बाकी सब बेकार होगा (और यह एक कारण है कि आप पाठ को बहुत अच्छी तरह से संकुचित कर सकते हैं)। छवि फ़ाइल प्रारूप जटिल हैं, और आप आमतौर पर उन्हें पाठ के रूप में नहीं देखते हैं, इसलिए उन्हें पठनीय होने की आवश्यकता नहीं है।

जैसा कि कोई सामान्य डेटा व्याख्या (वर्ण सेट) नहीं है, जो पठनीय वर्णों के लिए सभी संभावित मानों को मैप करता है, और चूंकि यह बहुत अधिक समझ में नहीं आएगा (जैसा कि यह पठनीय पाठ नहीं है), प्रमुख भागों को अस्पष्ट के रूप में प्रदर्शित किया जाता है।


एक हेक्स संपादक डेटा के लिए एक अलग प्रतिनिधित्व चुनता है: यह प्रत्येक बाइट को दो हेक्साडेसिमल अंकों के रूप में प्रदर्शित करता है । यह सिर्फ एक अलग प्रतिनिधित्व है, और एक आसानी से मानव-पठनीय चरित्र सेट के साथ: सभी 256 संभव बाइट मूल्यों को दो विषम अंकों के रूप में दर्शाया जा सकता है।

चूंकि हेक्स और इसके विपरीत (बाइनरी डेटा / एक हेक्साडेसिमल अंक से बाइनरी डेटा की एक आसान मैपिंग) है, और बाइनरी में प्रति अंक बहुत कम जानकारी शामिल है, हेक्साडेसिमल आम तौर पर बाइनरी को पढ़ने के लिए मनुष्यों के लिए पसंदीदा तरीका है, जब तक कि विशिष्ट न हों। भिन्न प्रतिनिधित्व को प्राथमिकता देने के कारण।


कुछ पाठ संपादकों में एक हेक्स संपादक मोड हो सकता है और कुछ अनुमानी यह निर्धारित करने की कोशिश करते हैं कि क्या फ़ाइल पाठ या द्विआधारी है, और स्वचालित रूप से एक मोड या दूसरे का चयन करें। लेकिन यह सही होना मुश्किल हो सकता है और यह फ़ाइल की एक विशिष्ट संपत्ति नहीं है जो कहती है कि यह एक तरह का है या दूसरा है।


कुछ एफ़टीपी ग्राहक आपको यह निर्दिष्ट करने के लिए कहते हैं कि टेक्स्ट डेटा के लिए कौन सी फ़ाइल अंत का उपयोग किया जाता है । ये प्रोग्राम तब आपके द्वारा कनेक्ट की गई मशीन के OS से मिलान करने के लिए फ़ाइल सामग्री को बदल देंगे, क्योंकि Windows CR/LFलिनक्स और यूनिक्स (मैक ओएस एक्स सहित) की तुलना में एक अलग लाइन एंडिंग कैरेक्टर अनुक्रम ( ) का उपयोग करता है LF


4
उह, LF ने मुझे याद रखने की तुलना में अधिक बार काट लिया है।
सर्फस

32

क्योंकि आपने इसे टेक्स्ट एडिटर में खोला है , न कि बाइनरी एडिटर में


22
जैसा कि आपने देखा है, पाठ।
इग्नासियो वाज़केज़-अब्राम्स

1
हेक्साडेसिमल नंबरों (0-f) के प्रतिनिधित्व के रूप में पाठ जोड़े (बाइट्स) में व्यवस्थित। यदि आप बाइनरी चाहते हैं, तो शून्य को शून्य में ज़ीरो और लोगों के एक संवेदनात्मक स्ट्रिंग में परिवर्तित करें। हेक्स अधिक मानवीय पठनीय और समझ में आसान है।
फिस्को लैब्स

2
गॉट्टा का कहना है कि: किसी को इस तरह के सामान को पढ़ाने के एकमात्र उद्देश्य के लिए ओनेस और ज़ीरोस के साथ (और फिर शायद संबंधित हेक्स / चार / डिक्लेरेशन ट्रांसलेशन के साथ अलग पैन) के लिए एक वास्तविक-बाइनरी संपादक को बाहर करने के लिए साहसिक कदम उठाना चाहिए । मुझे पता है कि उन्हें नहीं, बल्कि लोकप्रिय मीडिया, और गणित के शिक्षकों को कंप्यूटर जानने का नाटक करना चाहिए, उत्सुक बच्चों को सीखने की इच्छा के लिए सभी अपेक्षाएं गलत हैं।
जेडजेआर

@ZJR: कोई कारण नहीं वे नहीं करना चाहिए। कई हेक्स संपादक आपको बाइनरी में फ़ाइल सामग्री देखने देते हैं। प्रोग्रामर आमतौर पर इसे हेक्साडेसिमल दृश्य के रूप में उपयोगी नहीं पाते हैं, इसलिए आप इसके बारे में उतना नहीं सुनते हैं।
डेविड

16

यह सब संदर्भ और व्याख्या के साथ करना है। आपके कंप्यूटर में उच्च और निम्न वोल्टेज या डिस्क के चुंबकित क्षेत्रों के पैटर्न हैं, जो केवल तभी अर्थ प्राप्त करते हैं जब हम तय करते हैं कि हम उन्हें कैसे व्याख्या करना चाहते हैं।

अलग-अलग परिस्थितियों में, पैटर्न कम-हाई-लो-लो-लो-लो-लो-हाई-हाई का मतलब हो सकता है संख्या 65, एक कैपिटल लेटर 'ए', एक आकाश-नीला रंग, जो एक ग्राहक ने कॉफी का आदेश दिया, 'मार्च' 6 'या कुछ भी, वास्तव में।

जब आप एक ग्राफिक्स प्रोग्राम में अपनी छवि फ़ाइल खोलते हैं, तो वह इसे एक छवि के रूप में व्याख्या करना जानता है, जानता है कि कौन से पैटर्न छवि प्रारूप को इंगित करते हैं, कौन से पैटर्न छवि आकार और इतने पर संकेत देते हैं।

जब आप एक टेक्स्ट एडिटर में अपनी छवि फ़ाइल खोलते हैं, तो इसे टेक्स्ट के रूप में माना जाता है। यह एक बहुत ही सरल प्रारूप है, जो वास्तव में कंप्यूटर पर चल रहा है, उसके बहुत करीब है, लेकिन अभी भी कुछ व्याख्या चल रही है। विशेष रूप से, लगभग हर पैटर्न की व्याख्या एक विशेष चरित्र के रूप में की जाती है, कुछ सामान्य जैसे कि AZ, लेकिन कुछ अजीब चरित्र भी। कुछ पैटर्न वर्णों के रूप में दिखाई नहीं देते हैं, लेकिन उन्हें मूल स्वरूपण के रूप में माना जाता है: newline, tab।

(यूटीएफ -8 जैसे यूनिकोड और टेक्स्ट एनकोडिंग जैसी चीजों से स्थिति थोड़ी जटिल है, लेकिन मैं यहां उन लोगों के साथ सरलता के लिए व्यवहार नहीं करूंगा।)

जब आपके पास एक पाठ संपादक में एक बाइनरी फ़ाइल खुली होती है, तो ध्यान रखें कि परिवर्तन न करें, क्योंकि आपके द्वारा किए गए लगभग किसी भी परिवर्तन से फ़ाइल की सामग्री की सामान्य व्याख्या पूरी तरह से बाधित हो जाएगी, अर्थात यह फ़ाइल को बर्बाद कर देगा और इसे अनुपयोगी बना देगा।


3

एक सरलीकृत उदाहरण के रूप में, एक टेक्स्ट एडिटर के साथ खोली गई छवि फ़ाइल पर विचार करें।

छवि एक साधारण शतरंज पैटर्न है, जिसमें वर्ग 3 पिक्सेल चौड़े और प्रत्येक वर्ग के बीच 1-पिक्सेल ग्रे बॉर्डर है। - तीन काले पिक्सेल, एक ग्रे बॉर्डर पिक्सेल, तीन सफेद पिक्सेल, एक ग्रे बॉर्डर पिक्सेल, दोहराएं।

उस छवि में पहली पंक्ति में निम्न मान चार बार होगा:

Black    Black    Black    Gray     White    White    White    Gray
0x000000 0x000000 0x000000 0x7F7F7F 0xFFFFFF 0xFFFFFF 0xFFFFFF 0c7F7F7F

(हेक्स में, बाइनरी के बजाय - बाइनरी में स्ट्रिंग लंबे समय तक चार बार होगी - 0x7F 0b01111111 के साथ प्रतिस्थापित किया जा रहा है)

यदि आप किसी पाठ संपादक में डेटा के उस तार को लोड करते हैं, तो आपको निम्नलिखित पाठ मिलेगा:

[नुल] [नुल] [नुल] [नुल] [नुल] [नुल] [नुल] [नुल] [नुल] [डेल] [डेल] [डेल] [रिक्त] [रिक्त] [रिक्त] [रिक्त] [रिक्त ] [रिक्त] [रिक्त] [रिक्त] [रिक्त] [डेल] [डेल] [डेल]

ऐसा इसलिए है क्योंकि 0x00 अशक्त मान के लिए ASCII कोड है और आपको ब्लैक पिक्सेल के लिए मान प्राप्त करने के लिए 3 बार लिखने की आवश्यकता है (वैसे भी 24 बिट बीएमपी में) और आपके पास 3 ब्लैक पिक्सल्स हैं। फिर 0x7F डिलीट के लिए ASCII कोड है, और ग्रे पिक्सेल प्राप्त करने के लिए आपको तीन बार चाहिए। 0xFF विशेष रूप से - यहां तक ​​कि विस्तारित ASCII सेट में - किसी भी चीज के लिए ASCII कोड को मान्य नहीं किया गया है - और आपको 3 सफेद पिक्सेल प्राप्त करने के लिए इसे 9 बार लिखने की आवश्यकता है। इसे खत्म करने पर, आपको ग्रे पिक्सेल लिखने के लिए तीन और डीलेट मिलेंगे।

इसे दिखाने का एक अलग तरीका, जो अधिक उपयोगी रूप से व्याख्यात्मक हो सकता है, इसका उल्टा उदाहरण है - एक पाठ संपादक में खोले जाने पर शून्य और लोगों को प्राप्त करने के लिए आपको क्या करना है?

शून्य और एक के लिए ASCII कोड, बिल्कुल! पाठ संपादक में एक शून्य को मान 0 के साथ एक बिट के रूप में संग्रहीत नहीं किया जाता है, इसे 8 बिट के रूप में 0b00110000, या हेक्स 0x30 में संग्रहीत किया जाता है

'0' के लिए ASCII कोड 0x30 है, और '1' के लिए ASCII कोड 0x31 है, इसलिए यदि आप एक शतरंज पैटर्न को शून्य और लोगों के रूप में संग्रहीत करना चाहते हैं, तो आपकी फ़ाइल इस तरह दिखाई देगी:

text editor:
10101010
01010101
10101010
01010101

Stored data (ASCII values for '1', '0' and 'new line'):
0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x0D 0x31 0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x0D  0x30 0x31 0x30 0x31 0x30 0x31 0x30 0x31

इसके अलावा भी बहुत कुछ है - फाइलें शुरू और बंद हो गई हैं और मेटाडेटा और अन्य सभी प्रकार की चीजें हैं, लेकिन टेकहोम सबक और आपके प्रश्न का उत्तर है:

जब तक आपकी फ़ाइल के पहले 8 बिट्स 0b00110000 नहीं हैं, तब तक आपका टेक्स्ट एडिटर '0' नहीं लिखेगा क्योंकि यह '0' अक्षर के लिए ASCII-code है। जब तक आपकी फ़ाइल के पहले 8 बिट्स 0b00110001 नहीं हैं, तब तक आपका टेक्स्ट एडिटर '1' नहीं लिखेगा क्योंकि यह '1' अक्षर के लिए ASCII-code है।


0

संपादक को यह पता लगाने के लिए पर्याप्त स्मार्ट नहीं है कि कुछ पाठ समझ में आता है या नहीं, इसलिए यह किसी भी फाइल को पाठ के रूप में प्रदर्शित करता है जब तक कि विशेष रूप से अन्यथा करने के लिए नहीं कहा जाता है, अगर इसमें वह विशेषता है। जैसा कि अन्य ने बताया, कुछ संपादकों में हेक्स प्रदर्शित करने की विशेषता है।


UltraEdit काफी स्मार्ट है - यह ऐसी फ़ाइलों के लिए हेक्स एडिट मोड पर स्विच करता है।
पीटर मोर्टेंसन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.