Konvertieren ein ushort-Wert in zwei byte-Werte in C#
Wie kann ich die split ein ushort in zwei byte-Variablen in C#?
Ich habe versucht, die folgenden (Paket.FrameID ist ushort):
Wenn ich versuche zu berechnen, diese mit Papier&Bleistift bekomme ich das richtige Ergebnis. Auch, wenn FrameID ist größer als ein byte (also das zweite byte nicht null), dann funktioniert es.
array[0] = (byte)(0x0000000011111111 & package.FrameID);
array[1] = (byte)(package.FrameID >> 8);
In meinem Fall Paket.FrameID ist 56 und das Ergebnis in array[0] 16, statt 56.
Wie kann ich dieses Problem beheben?
Du musst angemeldet sein, um einen Kommentar abzugeben.
0x0000000011111111
ist nicht eine binäre Zahl, es ist eine hex-Zahl. Sie benötigen0x0ff
statt.Da jedoch das Ergebnis ist ein byte-und die Umwandlung in ein byte verwirft die oberen bits sowieso, braucht man eigentlich nicht zu
and
das Ergebnis. Sie können nur dazu:(Das ist vorausgesetzt, dass Sie nicht mit
checked
code. Wenn Sie sind, dann Gießen Sie einen Wert größer als 255 zu einembyte
zu einer Ausnahme führen. Sie werden wissen, wenn Sie mitchecked
code.)0x0f
ist 1 byte, wenn wir einenbit and
Betrieb und dieushort
ist, ist der Rückgabewert ist nur das untere nibble des lower-byte, ich denke, es ist0x00ff
.Verwenden BitConverter
0x00ff
0x0000000011111111
es scheint zu sein, ein 8-byte-Zahl (16 hex-stellen), aber da die führenden 8 hex-Ziffern sind alle null, es wird interpretiert als ein 4-byte-Zahl. Und seit dem ersten nicht-null-Ziffer (1
) ist zwischen1
und7
, nicht zwischen8
undf
ist dies einint
, nicht einuint
. Sie können versuchen,var a = 0x11223344;
(int
),var b = 0x81223344;
(uint
),var c = 0x112233448899aabb;
(long
),var d = 0x812233448899aabb;
(ulong
).