c# सी#में स्ट्रिंग को बाइट सरणी में कनवर्ट करना




string encoding (8)

सबसे पहले, System.Text जोड़ें। System.Text नामस्थान

using System.Text;

फिर इस कोड का प्रयोग करें

string input = "some text"; 
byte[] array = Encoding.ASCII.GetBytes(input);

इसे ठीक करने की उम्मीद है!

मैं सी # के लिए काफी नया हूँ। मैं वीबी से कुछ सी # में परिवर्तित कर रहा हूँ। इस कथन के वाक्यविन्यास में कोई समस्या है:

if ((searchResult.Properties["user"].Count > 0))
{
    profile.User = System.Text.Encoding.UTF8.GetString(searchResult.Properties["user"][0]);
}

मैं फिर निम्न त्रुटियों को देखता हूं:

तर्क 1: 'ऑब्जेक्ट' से 'बाइट []' में परिवर्तित नहीं हो सकता

'System.Text.Encoding.GetString (बाइट [])' के लिए सबसे अच्छा ओवरलोडेड विधि मिलान कुछ अमान्य तर्क है

मैंने this पोस्ट के आधार पर कोड को ठीक करने का प्रयास किया, लेकिन फिर भी कोई सफलता नहीं मिली

string User = Encoding.UTF8.GetString("user", 0);

कोई सुझाव?


var result = System.Text.Encoding.Unicode.GetBytes(text);

निम्नलिखित दृष्टिकोण केवल तभी काम करेगा जब वर्ण 1 बाइट हैं। (डिफ़ॉल्ट यूनिकोड काम नहीं करेगा क्योंकि यह 2 बाइट्स है)

public static byte[] ToByteArray(string value)
{            
    char[] charArr = value.ToCharArray();
    byte[] bytes = new byte[charArr.Length];
    for (int i = 0; i < charArr.Length; i++)
    {
        byte current = Convert.ToByte(charArr[i]);
        bytes[i] = current;
    }

    return bytes;
}

इसे सरल रखना


यदि आपके पास पहले से बाइट सरणी है तो आपको यह जानना होगा कि उस बाइट सरणी में इसे बनाने के लिए किस प्रकार का एन्कोडिंग उपयोग किया गया था।

उदाहरण के लिए, यदि बाइट सरणी इस प्रकार बनाई गई थी:

byte[] bytes = Encoding.ASCII.GetBytes(someString);

आपको इसे इस तरह की स्ट्रिंग में वापस चालू करने की आवश्यकता होगी:

string someString = Encoding.ASCII.GetString(bytes);

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


जस्टिनस्टोल के संपादन के लिए एक परिष्करण (एरान योगेव का ब्लॉककॉपी का उपयोग)।

प्रस्तावित समाधान एन्कोडिंग का उपयोग करने से वास्तव में तेज़ है। समस्या यह है कि यह असमान लंबाई के बाइट एरे एन्कोडिंग के लिए काम नहीं करता है। जैसा कि दिया गया है, यह एक अपरिचित अपवाद उठाता है। स्ट्रिंग से डीकोड करते समय 1 से लंबाई बढ़ाकर पीछे की बाइट छोड़ देता है।

मेरे लिए, आवश्यकता आई जब मैं DataTable से JSON एन्कोड करना चाहता था। मैं तारों में बाइनरी फ़ील्ड को एन्कोड करने और स्ट्रिंग बैक से byte[] तक डीकोड करने का एक तरीका ढूंढ रहा था।

इसलिए मैंने दो वर्ग बनाए - एक जो ऊपर दिए गए समाधान को लपेटता है (तारों से एन्कोडिंग ठीक है, क्योंकि लंबाई हमेशा भी होती है), और दूसरा जो byte[] एन्कोडिंग को संभालता है।

मैंने एक सिंगल कैरेक्टर जोड़कर असमान लंबाई की समस्या हल की जो मुझे बताती है कि बाइनरी सरणी की मूल लंबाई अजीब ('1') या यहां तक ​​कि ('0') थी

निम्नलिखित नुसार:

public static class StringEncoder
{
    static byte[] EncodeToBytes(string str)
    {
        byte[] bytes = new byte[str.Length * sizeof(char)];
        System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
        return bytes;
    }
    static string DecodeToString(byte[] bytes)
    {
        char[] chars = new char[bytes.Length / sizeof(char)];
        System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
        return new string(chars);
    }
}

public static class BytesEncoder
{
    public static string EncodeToString(byte[] bytes)
    {
        bool even = (bytes.Length % 2 == 0);
        char[] chars = new char[1 + bytes.Length / sizeof(char) + (even ? 0 : 1)];
        chars[0] = (even ? '0' : '1');
        System.Buffer.BlockCopy(bytes, 0, chars, 2, bytes.Length);

        return new string(chars);
    }
    public static byte[] DecodeToBytes(string str)
    {
        bool even = str[0] == '0';
        byte[] bytes = new byte[(str.Length - 1) * sizeof(char) + (even ? 0 : -1)];
        char[] chars = str.ToCharArray();
        System.Buffer.BlockCopy(chars, 2, bytes, 0, bytes.Length);

        return bytes;
    }
}

क्या कोई ऐसा कारण देखता है कि ऐसा क्यों न करें?

mystring.Select(Convert.ToByte).ToArray()

इसके अलावा आप नीचे दिए गए string प्रकार में कोई विधि जोड़ने के लिए एक एक्सटेंशन विधि का उपयोग कर सकते हैं:

static class Helper
{
   public static byte[] ToByteArray(this string str)
   {
      return System.Text.Encoding.ASCII.GetBytes(str);
   }
}

और इसे नीचे की तरह उपयोग करें:

string foo = "bla bla";
byte[] result = foo.ToByteArray();

static byte[] GetBytes(string str)
{
     byte[] bytes = new byte[str.Length * sizeof(char)];
     System.Buffer.BlockCopy(str.ToCharArray(), 0, bytes, 0, bytes.Length);
     return bytes;
}

static string GetString(byte[] bytes)
{
     char[] chars = new char[bytes.Length / sizeof(char)];
     System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
     return new string(chars);
}




byte