Frage

Ich habe hier ein Problem habe, das wahrscheinlich ist etwas, dass ich gerade mit Blick auf bin, aber ich kann nicht verstehen, warum es passiert ...

Das Problem, das ich habe ist, dass ich die Bit-Wandler bin mit mir von einem 2-Byte-Array ein Int16 zu geben, aber aus irgendeinem Grund, wenn ich dies tun - ich die Nummer bekomme ich bekommen sollte, mit 0xFFFF zu Beginn der Zahl hinzugefügt.

Beispiel ...

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

Das wird wieder mit "ErstellDatum" zu sein 0x3d67 (richtig), aber Creation 0xffffa388 zu sein.

würde jemand zufällig weiß, warum dies geschieht, und eine Möglichkeit, dies zu korrigieren?

War es hilfreich?

Lösung

ist 0xA388 eine negative Int16, so zu Int32 konvertiert geben ein unterzeichnen erweitert negativen int mit ähnlicher Wert. Das 0xFFFF Sie sehen, ist die Vorzeichenerweiterung (padding mit ‚1‘ Bit). Bessere Nutzung UInt16 und UInt32.

Andere Tipps

0xffffa388 ist kein Int16. Sind Sie sicher, dass Sie es nicht bis zu einem gewissen 32-Bit-Typ Gießen?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top