Frage

Was ist der beste Weg, um zwei uints in ein ulong in c # zu kombinieren, um die hohe / niedrige uints Einstellung.

Ich weiß bitshifting kann es tun, aber ich weiß nicht, die Syntax, oder es vielleicht andere APIs wie BitConverter zu helfen, aber ich sehe nicht ein Verfahren, das tut, was ich will.

War es hilfreich?

Lösung

ulong mixed = (ulong)high << 32 | low;

Die Besetzung ist sehr wichtig. Wenn Sie die Stimmen, in Anbetracht der Tatsache, dass auslassen high vom Typ uint ist (die 32 Bit), werden Sie ein 32-Bit-Wert 32 Bits nach links verlagern. Shift-Operatoren auf 32-Bit-Variablen Verschiebung Sachen von right-hand-side mod verwenden 32. Effektiv Verschieben eines uint 32 Bits nach links ist eine no-op . Casting zu ulong verhindert dies.

diese Tatsache überprüfen ist einfach:

uint test = 1u;
Console.WriteLine(test << 32); // prints 1
Console.WriteLine((ulong)test << 32); // prints (ulong)uint.MaxValue + 1

Andere Tipps

ulong output = (ulong)highUInt << 32 + lowUInt

Der << und >> Betreiber bitshift nach links (höher) und rechts (unten) ist. highUInt << 32 ist funktionell die gleiche wie highUInt * Math.Pow(2, 32), kann aber schneller sein und ist (IMO) einfachere Syntax.

Sie haben die HIGHINT auf ein ulong zu konvertieren, bevor Sie Bitshift:

ulong output = highInt;
output = output << 32;
output += lowInt;

Encoding:

ulong mixed = (ulong)hi << 32 | lo;

Dekodierung:

uint lo = (uint)(mixed & uint.MaxValue);
uint hi = (uint)(mixed >> 32);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top