Question

J'ai un problème qui est probablement quelque chose que je suis juste avec vue, mais je ne comprends pas pourquoi ça se passe ...

Le problème que je vais avoir est que je suis en utilisant le convertisseur de bits pour me donner un Int16 d'un tableau de 2 octets, mais pour une raison chaque fois que je fais cela - je reçois le numéro que je devrais obtenir, avec 0xFFFF ajouté au début du numéro.

Exemple ...

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);

Ce sera de retour avec "CreationDate" étant 0x3d67 (correct), mais CreationTime étant 0xffffa388.

ce que quelqu'un arrive à savoir pourquoi ce qui se passe, et un moyen de corriger cela?

Était-ce utile?

La solution

0xA388 est un négatif Int16, alors convertie en Int32 donnent un résultat négatif signe étendu avec int valeur similaire. Ce 0xFFFF vous voyez est l'extension de signe (rembourrage avec des bits « 1 »). Une meilleure utilisation UInt16 et UInt32.

Autres conseils

0xffffa388 n'est pas un Int16. Etes-vous que vous n'êtes pas le jeter à un certain type 32 bits?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top