سؤال

أحاول تحويل قيمة int إلى نوع char غير موقّع 16 بت (Ushort). في مثال ، 41104 هو A909 في Ushort ، لكن في C# حاولت عينة الكود AS (بمساعدة من مقالة MSDN bitConverter.getBytes Yöntem (UINT16)):

byte[] bytes = BitConverter.GetBytes(41104);
string bytes = BitConverter.ToString(byteArray);
//It returns "90-A0"

كيف أحصل على قيمة A909 كـ Ushort لـ 41104؟

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

المحلول

في الواقع القيمة الصحيحة (= سداسي عشري) هي A090. لا يهم ما إذا كان الأمر كذلك أم لا ، ما تريده هو عرض ما يعادل سداسي عشري.

مقتطف الرمز الذي قدمته بالفعل يفعل هذا. بايت واحد هو "A0" الآخر "90". عليك فقط الحصول على الطلب بشكل صحيح.

طريقة أخرى هي السماح .net القيام بهذه المهمة

String.Format("{0:X}", 41104);

كما ترون أنه ليس حقًا تحويل بيانات ، بل طريقة مختلفة للعرض.

نصائح أخرى

تحتاج إلى إعادة ترتيب البايتات:

byte[] bytes = BitConverter.GetBytes(41104);
if (BitConverter.IsLittleEndian)
{    List<byte> tmp = new List<byte>();
     tmp.AddRange(bytes);
     tmp.Reverse();
     bytes = tmp.ToArray();
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top