BitConverter.toint16 يضيف 0xffff إلى الرقم؟ (ج#)
-
29-09-2019 - |
سؤال
لدي مشكلة هنا على الأرجح ، وهذا شيء أطلبه فقط ، لكنني لا أستطيع أن أفهم سبب حدوثه ...
المشكلة التي أواجهها هي أنني أستخدم محول البتات لإعطائي INT16 من صفيف 2 بايت ، لكن لسبب ما كلما فعلت ذلك-أحصل على الرقم الذي يجب أن أحصل عليه ، مع إضافة 0xFFFF إلى بداية الرقم.
مثال...
byte[] ourArray = { 0x88, 0xA3, 0x67, 0x3D };
Int16 CreationDate = BitConverter.ToInt16(new byte[] {ourArray[2], ourArray[3]} , 0);
Int16 CreationTime = BitConverter.ToInt16(new byte[] {ourArray[0], ourArray[1]}, 0);
سيعود ذلك مع "CreationDate" كونه 0x3d67 (صحيح) ، ولكن CreationTime كونه 0xffffa388.
هل سيعرف أي شخص سبب حدوث ذلك ، وطريقة لتصحيح هذا؟
المحلول
0xa388 هو INT16 سلبي ، لذلك يتم تحويله إلى int32 تم تمديد علامة INT سلبية مع قيمة مماثلة. هذا 0xffff الذي تراه هو امتداد الإشارة (الحشو مع البتات '1'). من الأفضل استخدام UINT16 و UINT32.
نصائح أخرى
0xffffa388 ليس INT16. هل أنت متأكد من أنك لا تلميه بنوع 32 بت؟
لا تنتمي إلى StackOverflow