PDA

Visualizza la versione completa : [C] Riconoscere e trattare con stringhe binarie


Maxa12
28-04-2008, 16:08
Salve,
per diletto vorrei cimentarmi nella lettura di stringhe binarie che un dispositivo simil domitica mi rilascia via seriale o via tcp.

Ho giÓ sviluppato la parte server che riceve in tcp la stringa ma ora vorrei capire come poterla riconoscere (ovvero capire se Ŕ nel formato sotto specificato) e come poter estrapolare i dati.

Mi spiego meglio nel datasheet dell'oggetto Ŕ data una struttura di questo tipo qui:

&& + A + B + 0x9845 + DATA + 0x7C + C + 0x7C + D + E \r\n

&& -> fissi (2byte)
A -> valore esadecimale rappresentante la lunghezza dell'intera stringa (2byte)
B -> ID dell'apparecchio (7byte)
DATA -> dati che mi trasmette l'oggetto (da 0byte a 100byte)
C -> stato della batteria (3byte)
D -> valore fisso non Ŕ specificata la funzione (2byte)
E -> checksum CRC16 (0xfffff) 2byte

Quello che vorrei fare io Ŕ riconoscere una stringa che mi arriva nel formato sopra specificato (potrebbero arrivarmi anche altre stringhe di altri dispositivi in futuro) e poter salvarmi ogni dato in una variabile apposita.

Potete aiutarmi?

Grazie

Gil Mour
29-04-2008, 15:49
Ma dov'Ŕ il problema? Non ho capito cosa vuoi sapere..hai tutti gli elementi che ti servono

Potresti approcciare il problema in una maniera simile



typedef struct
{
char header[2];
char A [2];
//eccetera
} LaStringa;

LaStringa tutte_le_stringhe[MAX_STRINGHE];



DopodichŔ ti leggi la stringa carattere per carattere (ti ricordo che un carattere ascii misura un byte) e salvi i valori nella struttura dati, es


strncpy(tutte_le_stringhe[i].header,"&&",2);
strncpy(tutte_le_stringhe[i].A,il_valore_che_hai_letto,2);
//...


Infine, per ottenere la dimensione del campo DATA, se ho capito bene il protocollo, ti basterÓ una semplice sottrazione tra la lunghezza totale della stringa (campo A) meno una costante, che sarebbe la somma di tutti gli altri campi di lunghezza nota a priori

Loading