سؤال

لدي مشكلة هنا على الأرجح ، وهذا شيء أطلبه فقط ، لكنني لا أستطيع أن أفهم سبب حدوثه ...

المشكلة التي أواجهها هي أنني أستخدم محول البتات لإعطائي 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 بت؟

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