Domanda

Ho un problema qui che è probabilmente qualcosa che sto solo domina, ma non riesco a capire perché sta succedendo ...

Il problema che sto avendo è che sto usando il convertitore po 'di darmi un Int16 da una matrice a 2 byte, ma per qualche ragione ogni volta che faccio questo - ottengo il numero dovrei ottenere, con 0xFFFF aggiunto all'inizio del numero.

Esempio ...

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

che tornerà con "CreationDate" essere 0x3d67 (corretto), ma essendo CreationTime 0xffffa388.

Qualcuno capita di sapere perché questo sta accadendo, e un modo per correggere questo?

È stato utile?

Soluzione

0xA388 è negativo Int16, così convertito in Int32 darà un firmare esteso int negativo con valore simile. Che 0xFFFF che si vede è l'estensione segno (imbottitura con '1' bit). Migliore utilizzo UInt16 e UInt32.

Altri suggerimenti

0xffffa388 non è un Int16. Sei sicuro che non stai lanciando a qualche tipo a 32-bit?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top