C# में स्ट्रिंग को बाइट ऐरे में बदलना: पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

"स्ट्रिंग्स" और "बाइट्स": यह प्रोग्रामर के लिए हमेशा सिरदर्द क्यों है?

\n

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

\n

Stack Overflow पर "Converting string to byte array in C#" प्रश्न ने हज़ारों व्यूज़ एकत्र किए हैं, यह कोई संयोग नहीं है। यह वह आधार है जिस पर फ़ाइलों के साथ काम करना, क्रिप्टोग्राफी, सीरियलाइज़ेशन और नेटवर्क संचार टिका हुआ है। इस विषय को समझे बिना, आप बार-बार एक ही गलती करेंगे। आइए एक बार और हमेशा के लिए समझ लें कि इसे सही तरीके से कैसे किया जाए।

\n\n

स्ट्रिंग को सीधे बाइट्स में क्यों नहीं बदला जा सकता?

\n

एक भोला तरीका है किसी कैरेक्टर के लिए BitConverter.GetBytes() का उपयोग करना? नहीं। समस्या यह है कि स्ट्रिंग एक अमूर्तता है जो कैरेक्टर (char, C# में 2 बाइट्स) से बनी होती है। जबकि बाइट ऐरे कच्चा डेटा है जो एन्कोडिंग पर निर्भर करता है।

\n

UTF-8 एन्कोडिंग में एक ही कैरेक्टर 'A' 1 बाइट लेगा, UTF-16 में 2 बाइट्स, और UTF-32 में 4 बाइट्स। यदि आप गलत एन्कोडिंग चुनते हैं, तो डेटा खो जाएगा। मुख्य नियम याद रखें: हमेशा एन्कोडिंग स्पष्ट रूप से निर्दिष्ट करें।

\n\n

सबसे लोकप्रिय तरीका: Encoding.UTF8.GetBytes()

\n

यह वही है जिसका उपयोग आप 90% मामलों में करेंगे। UTF-8 वेब, JSON और अधिकांश API के लिए डी-फैक्टो मानक है।

\n\n
using System;\nusing System.Text;\n\nclass Program\n{\n    static void Main()\n    {\n        string original = "Привет, мир! 🌍";\n        \n        // स्ट्रिंग को बाइट ऐरे में बदलें (UTF-8)\n        byte[] utf8Bytes = Encoding.UTF8.GetBytes(original);\n        \n        // वापस रूपांतरण (जाँच के लिए)\n        string restored = Encoding.UTF8.GetString(utf8Bytes);\n        \n        Console.WriteLine($"मूल स्ट्रिंग: {original}");\n        Console.WriteLine($"बाइट ऐरे (लंबाई {utf8Bytes.Length}): {BitConverter.ToString(utf8Bytes)}");\n        Console.WriteLine($"पुनर्स्थापित स्ट्रिंग: {restored}");\n    }\n}
\n\n

आउटपुट:

\n
मूल स्ट्रिंग: Привет, мир! 🌍\nबाइट ऐरे (लंबाई 18): D0-9F-D1-80-D0-B8-D0-B2-D0-B5-D1-82-2C-20-D0-BC-D0-B8-D1-80-21-20-F0-9F-8C-8D\nपुनर्स्थापित स्ट्रिंग: Привет, мир! 🌍
\n\n

ध्यान दें: इमोजी "🌍" 4 बाइट्स (F0-9F-8C-8D) लेता है। UTF-8 पुरानी एन्कोडिंग के विपरीत, यूनिकोड के किसी भी कैरेक्टर के साथ काम कर सकता है।

\n\n

अन्य लोकप्रिय एन्कोडिंग

\n
    \n
  • Encoding.ASCII — केवल 7-बिट कैरेक्टर (0-127)। सिरिलिक या विशेष कैरेक्टर के लिए उपयुक्त नहीं है — 127 से ऊपर का सब कुछ '?' में बदल जाएगा।
  • \n
  • Encoding.Unicode (जिसे UTF-16LE भी कहा जाता है) — C# के अंदर स्ट्रिंग्स को स्टोर करने के लिए उपयोग किया जाता है। प्रत्येक कैरेक्टर 2 बाइट्स (या सरोगेट जोड़े के लिए 4) लेता है।
  • \n
  • Encoding.UTF32 — प्रत्येक कैरेक्टर सख्ती से 4 बाइट्स। संसाधन-गहन लेकिन अनुमानित।
  • \n
  • Encoding.Default — सिस्टम एन्कोडिंग (ANSI)। इससे बचें! यह अलग-अलग कंप्यूटरों पर अलग होती है।
  • \n
\n\n

BitConverter और MemoryStream के साथ रूपांतरण

\n

कभी-कभी स्ट्रिंग का "कच्चा" प्रतिनिधित्व कैरेक्टर (char) ऐरे के रूप में प्राप्त करना आवश्यक होता है। यह एन्कोडेड बाइट्स के समान नहीं है, लेकिन निम्न-स्तरीय कार्य के लिए उपयोगी हो सकता है।

\n\n
string text = "C#";\n// char ऐरे प्राप्त करें\nchar[] chars = text.ToCharArray();\n// प्रत्येक char को 2 बाइट्स में बदलें (Little-Endian)\nbyte[] rawBytes = new byte[chars.Length * sizeof(char)];\nBuffer.BlockCopy(chars, 0, rawBytes, 0, rawBytes.Length);\n\nConsole.WriteLine(BitConverter.ToString(rawBytes)); // 43-00-23-00
\n\n

यह विधि UTF-16LE एन्कोडिंग में एक ऐरे देती है (जैसा कि मेमोरी में संग्रहीत होता है)। इसका उपयोग केवल तभी करें जब आपको ठीक-ठीक पता हो कि आप क्या कर रहे हैं।

\n\n

विशेष मामला: Base64

\n

यदि

ब्लॉग

पुस्तक अनुशंसाएँ