In C würde ich das tun
Int-Nummer = 3510;
char obere = Zahl & gt; & gt; 8;
char niedriger = Zahl & amp; & amp; 8;
SendByte (oben);
SendByte (niedriger);
Wo obere und untere beide = 54
In C # mache ich das:
%Vor%
Jedoch in der Debugger-Nummer = 3510, Ober = 13 und Unter = 0 das macht keinen Sinn, wenn ich den Code in & gt; & gt; 6 upper = 54 was absolut seltsam ist.
Grundsätzlich möchte ich nur das obere und untere Byte von der 16-Bit-Nummer bekommen und es nach "GETDM"
aus dem Com-Port sendenWie kann ich das tun? Es ist so einfach in C, aber in C # bin ich völlig ratlos.
Ihre Maskierung ist falsch - Sie sollten gegen 255 (0xff) anstelle von 8 maskieren. Shifting funktioniert in Bezug auf "Bits zum Verschieben durch", während bitweise und / oder gegen den zu maskierenden Wert arbeiten ... also wenn Sie Ich möchte nur die unteren 8 Bits behalten, Sie benötigen eine Maske, die nur die unteren 8 Bits enthält - also 255.
Beachten Sie, dass wenn Sie versuchen, eine Zahl in zwei Bytes aufzuteilen, sollte es wirklich eine kurze oder einfache Sache sein, nicht int
(das vier Bytes hat).
Beachten Sie, dass ich ushort
anstelle von byte
verwendet habe, da bitweises Rechnen einfacher ist, wenn Sie sich keine Gedanken über die Zeichenerweiterung machen müssen. Es wäre in diesem Fall nicht wirklich wichtig wegen der Art und Weise, wie die verkleinerte Umwandlung in byte
funktioniert, aber es ist die Art von Sache, an die Sie denken sollten.
Wahrscheinlich möchtest du es mit 0x00FF
Vollständiges Beispiel:
%Vor%Selbst wenn die akzeptierte Antwort zu der Frage passt, halte ich sie aufgrund der einfachen Tatsache, dass die Frage int und nicht kurz im Header enthält und sie in den Suchergebnissen irreführend ist, unvollständig, und wie wir wissen, hat Int32 in C # 32 Bit und also 4 Bytes. Ich werde hier ein Beispiel veröffentlichen, das im Falle der Verwendung von Int32 nützlich sein wird. Im Falle eines Int32 haben wir:
Und als solche habe ich die folgende Methode zur Konvertierung des Int32-Wertes in eine kleine Endian-Hex-Zeichenfolge erstellt, in der jedes Byte durch einen Whitespace von den anderen getrennt ist. Dies ist nützlich, wenn Sie Daten übertragen und möchten, dass der Empfänger die Verarbeitung schneller durchführt, kann er nur Split ("") und die Bytes als eigenständige Hexadezimalzeichenfolgen darstellen.
%Vor%Verwendung:
%Vor%Das Ergebnis ist:
Wenn es schwierig ist, die Methode, die ich erstellt habe, zu verstehen, dann könnte das Folgende verständlicher sein:
%Vor%Anmerkungen:
Hoffe das wird jemandem helfen!