تحويل مصفوفات البايت إلى سلاسل نصية مهمة شائعة في C# عند العمل مع البيانات الثنائية. تتطلب هذه العملية تحديد ترميز المستخدم لتفسير البايت، حيث تمثل ترميزات مختلفة (مثل UTF-8، و ASCII، و Unicode) الأحرف بشكل مختلف. يؤدي اختيار الترميز الخاطئ إلى إخراج غير صحيح أو مشوه. تستعرض هذه المقالة طريقتين رئيسيتين: استخدام Encoding.GetString()
والاستفادة من MemoryStream
.
جدول المحتويات
- تحويل مصفوفات البايت إلى سلاسل نصية باستخدام
Encoding.GetString()
- استخدام
MemoryStream
لتحويل مصفوفة البايت إلى سلسلة نصية - اختيار أفضل طريقة
تحويل مصفوفات البايت إلى سلاسل نصية باستخدام Encoding.GetString()
توفر طريقة Encoding.GetString()
نهجًا مباشرًا وفعالًا. تأخذ مصفوفة البايت والترميز كمدخل، وتعيد السلسلة النصية المقابلة.
using System;
using System.Text;
public class ByteArrayToString
{
public static void Main(string[] args)
{
// مصفوفة بايت نموذجية (تمثل "Hello, World!") في UTF-8
byte[] byteArray = Encoding.UTF8.GetBytes("Hello, World!");
// تحويل مصفوفة البايت إلى سلسلة نصية باستخدام ترميز UTF-8
string str = Encoding.UTF8.GetString(byteArray);
// طباعة السلسلة الناتجة
Console.WriteLine(str); // الإخراج: Hello, World!
}
}
يستخدم هذا المثال ترميز UTF-8. تذكر استبدال Encoding.UTF8
بالترميز المناسب (مثل Encoding.ASCII
، Encoding.Unicode
) إذا كانت مصفوفة البايت الخاصة بك تستخدم ترميزًا مختلفًا.
استخدام MemoryStream
لتحويل مصفوفة البايت إلى سلسلة نصية
يوفر نهج MemoryStream
مرونة أكبر، خاصة عند التعامل مع مصفوفات البايت الكبيرة أو عند الحاجة إلى تحكم أدق في سلوك الدفق. يتضمن إنشاء MemoryStream
من مصفوفة البايت، ثم استخدام StreamReader
لقراءة البيانات كسلسلة نصية.
using System;
using System.IO;
using System.Text;
public class ByteArrayToStringMemoryStream
{
public static void Main(string[] args)
{
// مصفوفة بايت نموذجية (تمثل "Hello, World!") في UTF-8
byte[] byteArray = Encoding.UTF8.GetBytes("Hello, World!");
// إنشاء MemoryStream من مصفوفة البايت
using (MemoryStream stream = new MemoryStream(byteArray))
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
// قراءة السلسلة من الدفق
string str = reader.ReadToEnd();
// طباعة السلسلة الناتجة
Console.WriteLine(str); // الإخراج: Hello, World!
}
}
}
}
تضمن عبارات using
إدارة الموارد بشكل صحيح. على الرغم من أن هذه الطريقة توفر تحكمًا أكبر، إلا أنها أقل كفاءة بشكل عام من Encoding.GetString()
لمصفوفات البايت الأصغر حجمًا.
اختيار أفضل طريقة
في معظم السيناريوهات التي تتضمن مصفوفات بايت أصغر حجمًا، فإن Encoding.GetString()
هو الخيار الأبسط والأكثر كفاءة. ومع ذلك، بالنسبة للمصفوفات الأكبر حجمًا، أو معالجات الدفق المعقدة، أو عندما تكون هناك حاجة إلى تحكم أدق في الدفق، يوفر MemoryStream
حلاً أكثر قوة. دائمًا ما تعطي الأولوية لاختيار الترميز الصحيح لضمان التحويل الدقيق.