बाइट्स को स्ट्रिंग्स में बदलना: C# में हेक्साडेसिमल कोड का जादू
\n\nक्या आपने कभी सोचा है कि कंप्यूटर किसी तस्वीर, संगीत या टेक्स्ट फ़ाइल को कैसे देखता है? सब कुछ सिर्फ बाइट्स का एक क्रम है। लेकिन बाइट्स को यूज़र को दिखाना या URL में भेजना आसान नहीं है। यहाँ हेक्साडेसिमल स्ट्रिंग (hex string) काम आती है - बाइनरी डेटा का एक कॉम्पैक्ट और पढ़ने योग्य रूप।
\n\nकल्पना करें: आप एक क्रिप्टोग्राफ़िक मॉड्यूल लिख रहे हैं, हैश के साथ काम कर रहे हैं, JSON के माध्यम से बाइनरी डेटा भेज रहे हैं, या पैकेट की सामग्री लॉग कर रहे हैं। और अचानक - आपको बाइट्स की एक array को एक समझने योग्य स्ट्रिंग में बदलना होगा। या फिर, hex स्ट्रिंग से मूल बाइट्स को पुनर्स्थापित करना होगा। परिचित लगता है? यह प्रश्न Stack Overflow पर सबसे लोकप्रिय में से एक है, और आज हम इसे हमेशा के लिए समझ लेंगे। pythonlib.ru पर आपका स्वागत है - प्रोग्रामिंग की दुनिया में आपका मार्गदर्शक।
\n\nbyte array को hex string में क्यों बदलें?
\n\nचलिए सीधे मुद्दे पर आते हैं। बाइट array (byte[]) कच्चा डेटा है: 0 से 255 तक की संख्याएँ। इंसानों के लिए इसे पढ़ना मुश्किल है, और कुछ टेक्स्ट प्रोटोकॉल (HTTP, JSON) में यह फ़ॉर्मैट को खराब कर सकता है। Hex स्ट्रिंग दोनों समस्याओं को हल करती है:
\n\n- \n
- कॉम्पैक्टनेस: एक बाइट दो अक्षरों में बदल जाता है (जैसे, 255 → "FF")। \n
- सुरक्षा: स्ट्रिंग में केवल सुरक्षित अक्षर रहते हैं (0-9, A-F)। \n
- सुविधा: hex स्ट्रिंग्स को कॉपी करना, तुलना करना और लॉग करना आसान है। \n
आपने शायद MD5, SHA256 हैश या ऑथराइज़ेशन टोकन में ऐसी स्ट्रिंग्स देखी होंगी। अब आप जानते हैं कि यह 'अंदर' कैसे काम करता है।
\n\nतरीका #1: क्लासिक - BitConverter (सरल और तेज़)
\n\nC# में सबसे लोकप्रिय तरीका बिल्ट-इन क्लास BitConverter का उपयोग करना है। यह .NET के पहले संस्करण से मौजूद है और बिना किसी झंझट के काम करता है।
byte[] → hex string में बदलना
\n\nbyte[] data = { 0x0F, 0x1A, 0xFF, 0x00 };\nstring hexString = BitConverter.ToString(data);\nConsole.WriteLine(hexString); // आउटपुट: 0F-1A-FF-00\n\nबहुत आसान है, है ना? लेकिन एक बात है: अक्षरों के जोड़े के बीच एक डैश (-) जुड़ जाता है। अगर डैश आपको परेशान करता है, तो इसे आसानी से हटाया जा सकता है:
\n\nstring hexString = BitConverter.ToString(data).Replace("-", "");\nConsole.WriteLine(hexString); // आउटपुट: 0F1AFF00\n\nफ़ायदे: न्यूनतम कोड, बिल्ट-इन मेथड, शुरुआती लोगों के लिए समझने में आसान।
\nनुकसान: अतिरिक्त डैश (हटाना पड़ता है), इंटरमीडिएट स्ट्रिंग्स पर थोड़ी मेमोरी खर्च होती है।
उल्टा रूपांतरण: hex string → byte[]
\n\nअब उल्टी ऑपरेशन थोड़ी मुश्किल है। BitConverter केवल एक दिशा में काम करता है। लेकिन हम हार नहीं मानते - एक सरल पार्सर लिखते हैं:
\n\npublic static byte[] HexStringToBytes(string hex)\n{\n // संभावित डैश और स्पेस हटाएँ\n hex = hex.Replace("-", "").Replace(" ", "");\n int length = hex.Length;\n byte[] bytes = new byte[length / 2];\n for (int i = 0; i < length; i += 2)\n {\n bytes[i / 2] = Convert.ToByte(hex.Substring(i, 2), 16);\n }\n return bytes;\n}\n\n// उपयोग:\nstring hex = "0F1AFF00";\nbyte[] result = HexStringToBytes(hex);\n// result: { 0x0F, 0x1A, 0xFF, 0x00 }\n\nयह तरीका बेस 16 के साथ Convert.ToByte का उपयोग करता है - विश्वसनीय और पढ़ने योग्य। लेकिन बड़े arrays के लिए Substring कई अस्थायी स्ट्रिंग्स बनाता है। प्रोडक्शन कोड के लिए Span<T> या कैरेक्टर इंडेक्सिंग वाले लूप का उपयोग करना बेहतर है।
तरीका #2: आधुनिक - Convert.ToHexString (.NET 5+)
\n\n.NET 5 से शुरू करके, Microsoft ने लंबे समय से प्रतीक्षित Convert.ToHexString मेथड जोड़ा। यह तेज़ी से काम करता है और बिना डैश के।
byte[] data = { 0x0F, 0x1A, 0xFF, 0x00 };\nstring hexString = Convert.ToHexString(data);\nConsole.WriteLine(hexString); // आउटपुट: 0F1AFF00\n\nबहुत खूब! कोई डैश नहीं, कोई Replace नहीं। और उल्टी ऑपरेशन के लिए Convert.FromHexString मौजूद है।