Für einen angegebenen Kommunikationsstandard RTCM SC104 3.1 muss ich Daten über Bytes als ein Paar von 12-Bit-Datensegmenten aufteilen. Also muss ich für eine gegebene Nachricht die Nummer des Nachrichtentyps auf das erste Byte und die Hälfte des zweiten Bytes setzen. Dann muss ich eine ID-Ganzzahl auf der Hälfte des zweiten Bytes beginnen und mit dem dritten Byte fortfahren. Diese Art von Muster wird bis zum Ende der Nachricht fortgesetzt, wobei andere Ganzzahlen in 20-Bit-, 5-Bit- und anderen Größen heruntergeschnitten werden, wobei im wesentlichen die 0-Werte ausgeschnitten werden, die normalerweise das MSB-Ende der ganzzahligen Werte ausfüllen würden.Wie greift man auf ein einzelnes Byte einer ganzen Zahl zu?
Ich habe keine klare Definition gesehen, aber ich nehme an, dass es in der Netzwerkbyte-Reihenfolge ausgehen muss, also würde ich vor dem Kopieren von Bits meine ganzen Zahlen im Speicher umkehren müssen. Ich bin immer noch ziemlich neu in cpp und frage mich, wie komme ich zu den einzelnen Bytes, die eine ganze Zahl im Speicher bilden? Wenn ich auf die Bytes zugreifen kann, dann könnte ich bitweise verwenden oder die Bits von 2 Bytes auf eins für die Nachricht aufteilen.
Hier ist der Beginn eine Nachricht zu bauen, bevor die Daten hinzufügen:
//build message 1002 gps 00111110 1010
char buf1002[BUFFERSIZE];
buf1002[0] = 0x3E; //00111110
buf1002[1] = 0xA0; //10100000
//ref station id 12 bits of 16
//ex unsigned short m = 1100;
//m would be byte2 00000100 byte1 01001100
//buf1002[1] would be 10100100
//buf1002[2] would be 01001100
//reverse bit order for network after building?
Die Referenzstation von einer unsigned short sein wird, so dass eine 2-Byte-Ganzzahl. Wie kann ich ein einzelnes Byte daraus lesen? Beginne ich mit einem Speicherzeiger? Wenn ja, was?
Jede Hilfe würde sehr geschätzt werden.
Lesen Sie die erste Antwort hier http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c –
* "Die Referenzstation wird von einem unsigned short, also einer 2-Byte-Integer. "* Ein Short ist nicht erforderlich, um zwei Bytes zu sein (obwohl dies der bei weitem häufigste Fall ist), es muss * mindestens * 16 Bits sein. Sie könnten 'uint16_t' verwenden, um die Angelegenheit zu erzwingen. – dmckee