سؤال

ما هي أفضل طريقة لتقسيم عدد صحيح 32 بت إلى أربعة أحرف (غير موقعة) في C#.

هل كانت مفيدة؟

المحلول

سريع وغير قذر:

int value = 0x48454C4F;
Console.WriteLine(Encoding.ASCII.GetString(
  BitConverter.GetBytes(value).Reverse().ToArray()
));

تحويل int إلى بايت، وعكس مصفوفة البايت للحصول على الترتيب الصحيح ومن ثم الحصول على تمثيل أحرف ASCII منها.

يحرر:الأسلوب العكسي هو أسلوب ملحق من .NET 3.5، فقط للحصول على معلومات.قد لا تكون هناك حاجة أيضًا إلى عكس ترتيب البايت في السيناريو الخاص بك.

في صحتك، ديفيد

نصائح أخرى

شار؟ربما كنت تبحث عن هذه الوظيفة المساعدة الصغيرة المفيدة؟

Byte[] b = BitConverter.GetBytes(i);
Char c = (Char)b[0];
[...]

ليس من الواضح ما إذا كان هذا هو ما تريده حقًا، ولكن:

int x = yourNumber();
char a = (char)(x & 0xff);
char b = (char)((x >> 8) & 0xff);
char c = (char)((x >> 16) & 0xff);
char d = (char)((x >> 24) & 0xff);

يفترض هذا أنك تريد تفسير وحدات البايت على أنها أقل نطاق من أحرف Unicode.

لقد جربتها بعدة طرق وسجلت الوقت المستغرق لتحويل 1000000 ints.

طريقة التحويل المضمنة، 325000 علامة:

Encoding.ASCII.GetChars(BitConverter.GetBytes(x));

تحويل المؤشر، 100000 علامة:

static unsafe char[] ToChars(int x)
{
    byte* p = (byte*)&x)
    char[] chars = new char[4];
    chars[0] = (char)*p++;
    chars[1] = (char)*p++;
    chars[2] = (char)*p++;
    chars[3] = (char)*p;

    return chars;
}

التحول الجزئي، 77000 علامة:

public static char[] ToCharsBitShift(int x)
{
     char[] chars = new char[4];
     chars[0] = (char)(x & 0xFF);
     chars[1] = (char)(x >> 8 & 0xFF);
     chars[2] = (char)(x >> 16 & 0xFF);
     chars[3] = (char)(x >> 24 & 0xFF);
     return chars;
}

احصل على كتل 8 بايت:

int a = i & 255; // bin 11111111
int b = i & 65280; // bin 1111111100000000

قم بتقسيم البايتات الثلاث الأولى إلى بايت واحد، فقط قم بتقسيمها على الرقم المناسب وقم بإجراء منطقي آخر لتحصل على البايت النهائي.

يحرر:حل جيسون مع التحولات الصغيرة هو أجمل بكثير بالطبع.

BitConverter

يستخدم .net Unicode، والحرف هو 2 بايت وليس 1

للتحويل بين البيانات الثنائية التي تحتوي على نص غير Unicode، استخدم فئة System.Text.Encoding.

إذا كنت تريد 4 بايتات وليس أحرفًا، فاستبدل الحرف بالبايت في إجابة جيسون

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top