C#এ বিট বিন্যাসে স্ট্রিং রূপান্তর করা হচ্ছে




string encoding (8)

আপনার যদি ইতিমধ্যে একটি বাইট অ্যারে থাকে তবে আপনাকে এটি জানতে হবে যে এটি কী ধরনের এনকোডিং ব্যবহার করে এটি বাইট অ্যারে তৈরি করতে পারে।

উদাহরণস্বরূপ, বাইট অ্যারে এইরকম তৈরি করা হয়েছিল:

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

আপনাকে এটির মতো স্ট্রিং এ আবার চালু করতে হবে:

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

আপনি যদি উত্তরাধিকারসূত্রে প্রাপ্ত কোডটি খুঁজে পেতে পারেন তবে বাইট অ্যারে তৈরি করার জন্য এনকোডিং ব্যবহার করা হয় তবে সেটআপ করা উচিত।

আমি সি # বেশ নতুন। আমি ভিবি থেকে সি # এ কিছু রূপান্তর করছি। এই বিবৃতি সিনট্যাক্স সঙ্গে একটি সমস্যা হচ্ছে:

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);

কোনও পরামর্শ?


আমার জন্য এই কাজ, তারপরে আমি আমার ডেটাবেসে একটি বাইটা ক্ষেত্রের মধ্যে আমার ছবিটি রূপান্তর করতে পারি।

using (MemoryStream s = new MemoryStream(DirEntry.Properties["thumbnailphoto"].Value as byte[]))
{
    return s.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();

এটা ব্যবহার কর

byte[] myByte= System.Text.ASCIIEncoding.Default.GetBytes(myString);

চরিত্রগুলি যদি 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;
}

এটা সহজ রাখা


জাস্টিন স্টোলের সম্পাদনাতে একটি পরিমার্জনা (ইরান যোগেভ ব্লক কপির ব্যবহার)।

প্রস্তাবিত সমাধান এনকোডিং ব্যবহার করার চেয়ে প্রকৃতপক্ষে দ্রুত। সমস্যা এটি অসম দৈর্ঘ্যের বাইট অ্যারে এনকোডিং জন্য কাজ করে না। প্রদত্ত হিসাবে, এটি একটি বাইরের ব্যতিক্রম আপ উত্থাপন। স্ট্রিং থেকে ডিকোড করার সময় 1 দ্বারা দৈর্ঘ্য বাড়ানো একটি পিছনে বাইট পাতা।

আমার জন্য, যখন আমি DataTable থেকে JSON এনকোড করতে চাই তখন আমার প্রয়োজন হয়েছিল। আমি স্ট্রিংগুলিতে বাইনারি ক্ষেত্র এনকোড করার জন্য এবং স্ট্রিং ব্যাক থেকে byte[] ডিকোড করার জন্য একটি উপায় খুঁজছি 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;
    }
}

সর্বোপরি, System.Text নামস্থান যুক্ত করুন

using System.Text;

তারপর এই কোড ব্যবহার করুন

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

এটা ঠিক করার আশা করি!


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