Hallo Ich schreibe eine Bibliothek für die Kommunikation mit einem externen Gerät über RS232-serielle Verbindung.So garantieren Sie Bits von Zeichen und Kurzschluss für die Kommunikation mit externen Gerät
Oft muss ich einen Befehl mitteilen, der ein 8 Bit = 1 Byte Zeichen oder eine 16 Bit = 2 Byte Zahl enthält. Wie mache ich das auf eine tragbare Weise?
Hauptproblem
Aus anderen Fragen zu lesen scheint es, dass der Standard nicht 1byte = 8bits garantiert, (definiert in der Norm $ 1,7/1)
Der grundlegende Speichereinheit in dem C + + Speichermodell ist das Byte. Ein Byte zumindest groß genug ist, jedes Mitglied des Grundausführung Zeichensatzes enthalten, und ist aus einer zusammenhängenden Folge von Bits zusammengesetzt, die Nummer der Implementierung definiert.
Wie kann ich die Anzahl der Charts garantieren? Mein Gerät erwartet 8 Bit genau und nicht mindestens 8 Bit.
Ich realisiere, dass fast alle Implementierungen 1byte = 8 Bits haben, aber ich bin neugierig, wie man es garantiert.
Short-> 2-Byte-Check
ich Ihnen nichts ausmacht hoffen, würde ich auch meine vorgeschlagene Lösung für die kurze ausführen möchten - von Ihnen> 2-Byte-Konvertierung. Ich bin neu bei Byte-Konvertierungen und plattformübergreifender Portabilität.
Um die die Anzahl der Bytes der kurzen garantiere ich denke, ich
ein sizeof (kurz) tun zu müssen brauchen werde. Wenn sizeof (kurz) = 2 Umrechnen in Bytes und die Byte-Reihenfolge überprüfen (wie here)
wenn sizeof (kurz)> 2 dann die kurz Bytes umwandeln, die Byte-Reihenfolge überprüfen (wie here), dann überprüfen Sie die höchstwertige Bytes sind leer und entfernen sie?
Ist dies das Richtige? Gibt es einen besseren Weg?
Vielen Dank
Ja, ich denke, dein Recht. Ich benutze die boost.asio-Bibliothek, um die Low-Level-Kommunikation zu machen, so dass mir das nicht einfällt. Wäre es wahr, dass ein Benutzer auf einem System mit char = 16 Bits die Bibliothek nicht benutzen könnte? Wenn ich es anforderte, den Buchstaben "a" zu senden, wäre das die doppelte Anzahl von Bits, wie mein Gerät erwartet. – Tom
@Tom: Ich habe meine Antwort aktualisiert. – ruslik
Danke, ich bin trotzdem ein bisschen verwirrt (sorry). Also aus einer char = 16 Bit Implementierung: char c = 'a'; sende (c); würde die Hälfte des Charakters senden? Ist es möglich, das 16-Bit-Zeichen in 8 Bits umzuwandeln, um die Bits zu senden, die mein Gerät erwartet? – Tom