سؤال

هل هناك شيء مماثل لsprintf() في C #؟

وأود أن على سبيل المثال ترغب في تحويل عدد صحيح إلى 2 بايت بايت صفيف.

وشيء من هذا القبيل:

int number = 17;
byte[] s = sprintf("%2c", number);
هل كانت مفيدة؟

المحلول 3

واتضح أن ما أردت حقا كان هذا:

short number = 17;
System.IO.BinaryWriter writer = new System.IO.BinaryWriter(stream);
writer.Write(number);
writer.Flush();

والمفتاح هنا هو وظيفة الكتابة من الطبقة BinaryWriter. لديها 18 الزائدة، تحويل صيغ مختلفة لمجموعة بايت التي يكتب إلى الدفق. في حالتي أنا ديك للتأكد من عدد أريد يتم الاحتفاظ بها في نوع بيانات قصيرة للكتابة، وهذا سيجعل كتابة وظيفة الكتابة 2 بايت.

نصائح أخرى

string s = string.Format("{0:00}", number)

وسائل 0 أول "الوسيطة الأولى" (أي عدد)؛ 00 بعد النقطتين هو شكل محدد (2 أرقام رقمية).

ولكن، لاحظ أن سلاسل. NET هي UTF-16، وذلك في سلسلة 2-حرف هو 4 بايت، لا 2

و(تحرير: مسألة تغير من string إلى byte[])

لتحصل على بايت، واستخدام Encoding:

byte[] raw = Encoding.UTF8.GetBytes(s);

و(من الواضح ترميزات مختلفة قد يعطي نتائج مختلفة؛ وUTF8 إعطاء 2 بايت لهذه البيانات)

في الواقع، نسخة مختصرة من الشيء الأول هو:

string s = number.ToString("00");

ولكن النسخة string.Format أكثر مرونة.

وتحرير: (تحقق الجواب مارك لهذه الأخيرة) أفترض أنك تريد تحويل قيمة عدد صحيح إلى صفيف بايت وليس قيمة تحويلها إلى سلسلة أولا ثم إلى صفيف بايت

لتحويل عدد صحيح إلى صفيف بايت يمكنك استخدامها:

byte[] array = BitConverter.GetBytes(17);

ولكن من شأنها أن تعطيك مجموعة من 4 بايت وليس 2 (منذ عدد صحيح 32 بت). للحصول على مجموعة من 2 بايت يجب عليك استخدام:

byte[] array = BitConverter.GetBytes((short)17);

إذا كنت ترغب فقط في تحويل القيمة ثم استخدم 17 إلى حرفين:

string result = string.Format("{0:00}", 17);

ولكن كما أشار مارك من ستكون النتيجة تستهلك 4 بايت لأن كل حرف في NET هو 2 بايت (UTF-16) (بما في ذلك وحدتي بايت التي تمسك طول السلسلة سيكون 6 بايت).

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