Per uno standard di comunicazione specificato RTCM SC104 3.1, ho bisogno di dividere i dati tra byte come una coppia di segmenti di dati a 12 bit. Quindi per un dato messaggio ho bisogno di inserire il numero del tipo di messaggio sul primo byte e metà del secondo byte. Quindi ho bisogno di iniziare un numero intero ID sul secondo byte e continuare con il terzo byte. Questo tipo di pattern continua fino alla fine del messaggio, tagliando altri numeri interi a 20 bit, 5 bit e altre dimensioni essenzialmente tagliando gli 0 che normalmente riempirebbero l'estremità MSB dei valori interi.Come si accede a un singolo byte di un intero?
Non ho visto una definizione chiara ma presumo che debba uscire in ordine di byte di rete quindi prima di copiare bit dovrei invertire i miei numeri interi in memoria. Sono ancora abbastanza nuovo per cpp e mi sto chiedendo come ottengo i singoli byte che costituiscono un intero in memoria? Se riesco ad accedere ai byte, potrei usare bit per bit o dividere i bit da 2 byte su uno per il messaggio.
Ecco l'inizio della costruzione di un messaggio prima di aggiungere i dati:
//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?
La stazione di riferimento sarà da un breve, quindi un intero a 2 byte senza segno. Quindi come faccio a leggere un singolo byte da esso? Comincio con un puntatore di posizione di memoria? Se è così, allora?
Qualsiasi aiuto sarebbe molto apprezzato.
Leggi la prima risposta qui http://stackoverflow.com/questions/47981/how-do-you-set-clear-and-toggle-a-single-bit-in-c –
* "La stazione di riferimento essere da un corto senza segno, quindi un intero da 2 byte. "* Un cortometraggio non è richiesto per essere due byte (anche se questo è di gran lunga il caso più comune), è necessario che sia a * minimo * 16 bit. Potresti usare 'uint16_t' per forzare la questione. – dmckee