Was ist der beste Weg, zwei uints zu einem ulong in c # zu kombinieren, indem die high / low uints gesetzt werden.
Ich weiß, dass Bitshifting es kann, aber ich kenne die Syntax nicht, oder vielleicht gibt es andere APIs, die den BitConverter unterstützen, aber ich sehe keine Methode, die das tut, was ich will.
Die Besetzung ist sehr wichtig. Wenn Sie die Umwandlung weglassen, bedenkt man, dass high
vom Typ uint
ist (was 32 Bits entspricht), verschieben Sie einen 32-Bit-Wert um 32 Bits nach links. Shift-Operatoren für 32-Bit-Variablen verwenden Shift-Dateien nach right-hand-side
mod 32. Effektiv ist das Verschieben von uint
32 Bits nach links ein No-op . Casting nach ulong
verhindert dies.
Die Überprüfung dieser Tatsache ist einfach:
%Vor% Die Operatoren <<
und >>
werden nach links (höher) bzw. rechts (unten) verschoben. highUInt << 32
ist funktional identisch mit highUInt * Math.Pow(2, 32)
, kann aber schneller sein und ist (IMO) einfachere Syntax.
Sie müssen das highInt vor dem Bitshift in ein ulong konvertieren:
%Vor%