den folgenden Code Verpackung vier byte
Werte in eine uint
gegeben.Mathematische Operationen an gepackten Zahlenwerte
private static void Pack(byte x, byte y, byte z, byte w)
{
this.PackedValue = (uint)x |
((uint)y << 8) |
((uint)z << 16) |
((uint)w << 24);
}
Ist es möglich, mathematische Operatoren wie *, +,/and -
auf den Wert in einer Weise anzuwenden, dass sie in die richtige byte
Äquivalent ausgepackt werden kann?
BEARBEITEN.
Um zu klären, ob ich den Wert von einem anderen gepackten Wert
uint result = this.PackedValue * other.PackedValue
Dann entpacken Sie mit dem folgenden ...
public byte[] ToBytes()
{
return new[]
{
(byte)(this.PackedValue & 0xFF),
(byte)((this.PackedValue >> 8) & 0xFF),
(byte)((this.PackedValue >> 16) & 0xFF),
(byte)((this.PackedValue >> 24) & 0xFF)
};
}
ich die falschen Ergebnissen zu vermehren versuchen.
Hier ist ein vollständiges Codebeispiel des erwartete und tatsächliches Ergebnis zeigt.
void Main()
{
uint x = PackUint(128, 128, 128, 128);
uint y = (uint)(x * 1.5f);
byte[] b1 = ToBytes(x);
x.Dump(); // 2155905152
b1.Dump(); // 128, 255, 128, 255 RIGHT!
byte[] b2 = ToBytes(y);
b2.Dump(); // 0, 192, 192, 192 WRONG! Should be 192, 192, 192, 192
}
// Define other methods and classes here
private static uint PackUint(byte x, byte y, byte z, byte w)
{
return ((uint)x) |
((uint)y << 8) |
((uint)z << 16) |
((uint)w << 24);
}
public static byte[] ToBytes(uint packed)
{
return new[]
{
(byte)(packed & 0xFF),
(byte)((packed >> 8) & 0xFF),
(byte)((packed >> 16) & 0xFF),
(byte)((packed >> 24) & 0xFF)
};
}
Warum Sie es nicht versuchen? –
@roryap Ich habe aber ich bekomme die falschen Werte zurück, etwas überläuft. –
Ahhh, nun, ich würde sagen, Sie sollten dieses Bit in Ihre Frage aufnehmen. –