Hallo,
Ich nutze die Funktion SerialPort.Write() zum Verschicken von Bytes über den Com Port.
Nun kommt es allerdings vor das die Daten, die verschickt werden sollen, auch signed sein könnten (zB. -67). Die Funktion SerialPort.Write() bietet als Übergabeparameter leider nur die Möglichkeiten unsigned Bytes, Chars(Strungs) oder unsigned Bytearrays als Datentypen an. Und meckert logischerweise bei negativen Werten.
Wie kann ich "negative Zahlen" verschicken?
Vielen Dank,
Riddem
z.B. mit dem BitConverter wobei die empfangende Anwendung dann auch wissen muss das es ein signed-wert ist weil er ja auch anders interpretiert werden könnte.
Die empfangene Anwendung erwartet einen negativen Wert.
Allerdings verstehe ich den Ansatz mit der BitConverter-Class noch nicht ganz ?!
MSDN: BitConverter.GetBytes Method
Da gibt es auch eine Methode für einen signed-int die diesen in ein byte[] umwandelt welches du wiederrum versenden kannst.
Auf Empfängerseite wird die negative Zahl als Checksumme verwendet und im Format von EINEM Byte erwartet.
Die BitConverter Klasse stellt mir mit der Methode GetBytes allerdings keine Möglichkeit zur Verfügung, bei der ich einen EIN-Byte großen Wert zurückbekomme... bei INT 16 sind es ja logischerweise schon gleich 2 Bytes. ?!
Das byte array hat einen Indexer über den du auch an ein einzelnes Byte kommst.
byte b = -5;
//b ist 251
int i = b - 256;
//i sollte wieder -5 sein
Lg XXX
Hallo RiDDem,
auch wenn das natürlich mit BitConverter.GetBytes geht, kannst du die negative Zahl einfach auch in ein Byte casten, wenn du unchecked verwendest.
herbivore
mit dem zweier-Komplement ( 256 - X) hat es geklappt.
die möglichkeit mit uncheck klappte auch...
vielen dank für eure schnelle hilfe!