Immer Obere und untere byte von einem integer in C# und setzen es als ein char-array zum senden an einen com-port, wie?
In C würde ich dies tun
int Anzahl = 3510;
char oben = Zahl >> 8;
char lower = number && 8;
SendByte(oben);
SendByte(unten);
Wo Obere und untere würden beide = 54
In C# bin ich, dies zu tun:
int number = Convert.ToInt16("3510"); byte upper = byte(number >> 8); byte lower = byte(number & 8); char upperc = Convert.ToChar(upper); char lowerc = Convert.ToChar(lower); data = "GETDM" + upperc + lowerc; comport.Write(data);
Jedoch in der debugger-Nummer = 3510, oben = 13 und die untere = 0
das macht keinen Sinn, wenn ich den code >> 6 upper = 54, das ist absolut seltsam.
Im Grunde will ich nur, um die oberen und unteren byte von 16 bit-Zahl aus und senden Sie es an der com-port nach "GETDM"
Wie kann ich dies tun? Es ist so einfach in C, sondern in C# bin ich völlig ratlos.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Maskierung ist falsch - Sie sollten in der Maskierung gegen 255 (0xff) anstelle von 8. Verlagerung der arbeiten in Bezug auf die "bits, um die verschoben werden, indem" in der Erwägung, dass bitweise und - /oder gegen den Wert zu Maske gegen... also, wenn Sie wollen, nur halten Sie die unteren 8 bits, Sie müssen eine Maske, die nur die unteren 8 bits festgelegt, d.h. 255.
Beachten Sie, dass, wenn Sie versuchen, aufteilen einer Zahl in zwei bytes, es sollte wirklich kurz sein oder ushort, mit zu beginnen, nicht eine
int
(die vier bytes).Beachten Sie, dass ich verwendet habe
ushort
hier stattbyte
als bitweise Arithmetik ist leichter zu denken, wenn Sie nicht brauchen, um über Zeichen-Erweiterung. Wäre es nicht eigentlich egal, in diesem Fall durch die Art und Weise der einschränkende Konvertierung zubyte
funktioniert, aber es ist die Art von Sache, die Sie denken sollten.byte lower = (byte) number;
tun sollten, wie gutWerden Sie wahrscheinlich wollen und es mit
0x00FF
Vollständigen Beispiel:
Sollte es nicht sein:
Selbst wenn die akzeptierte Antwort passt zu der Frage, halte ich es für unvollständig, aufgrund der einfachen Tatsache, dass die Frage enthält int und nicht kurz im Kopf-und es ist irreführend, in den Suchergebnissen, und wie wir wissen, Int32 in C# hat 32 bits und somit 4 bytes. Ich poste hier ein Beispiel, das nützlich ist im Fall von Int32 verwenden. Im Falle eines Int32 wir haben:
- Und als solche habe ich die folgende Methode für die Umwandlung der Int32-Wert, der in einem little-endian-Hex-string, in dem jedes byte wird von den anderen getrennt durch ein Leerzeichen. Dies ist nützlich, wenn Sie Daten übertragen wollen und der Empfänger, um die Verarbeitung schneller, er kann nur Split(" ") und die bytes dargestellt als standalone-hex-strings.
Verwendung:
Ist das Ergebnis:
Wenn es schwer zu verstehen ist die Methode, die ich erstellt habe, dann ist das folgende vielleicht ein verständlicher eins:
Bemerkungen:
Hoffe, dies hilft jemand!
Werden ein wenig mehr Kreativität