Quote:
Originariamente inviato da honny
ora vorrei mettere in messaggio[7] il valore intero in base 10 3106 :
int intero = 3106;//OK
messaggio[7]=intero; //QUESTA COSA NON FUNZIONA !!!
ed e' giusto che non funzioni, perche' il valore massimo che posso mettere in un unsigned char e' 0xFF , cioe' 255 .
3106 in esadecimale e' : C22
in pratica devo utilizzare sia messaggio[7] sia messaggio[8],cioe':
messaggio[7]=0x0C;
messaggio[8]=0x22;
|
In realta' il numero di caratteri necessari possono essere ben piu' di due (tipicamente 4 in una generica macchina a 32 bit).
La cosa piu' semplice e' fare un cast dell'array ad un array di interi e poi scriverci direttamente. Se pero' devi mandare il messaggio su architetture differenti, ti conviene convertire il valore in un formato neutrale, e fissare il numero di bit che vuoi usare
Ad esempio, se ti bastano gli interi senza segno puoi fare qualcosa del genere (notazione C++, per il C ci potrebbero essere delle differenze minori):
Codice:
#include <netinet/in.h>
...
uint32_t* x = (uint32_t*) messaggio;
x[0]=htonl(3106); // questo va a scrivere da messaggio[0] a messaggio[3]
Quando devi rileggere il valore dall'array fai la stessa cosa, convertendo pero' l'intero da "formato network" a quello specifico della macchina in uso:
Codice:
#include <netinet/in.h>
...
uint32_t* x = (uint32_t*) messaggio;
uint32_t n = ntohl( x[0] );
Se non ti servono tutti e 32 i bit, ma te ne bastano 16, allora puoi usare uint16_t, htons e ntohs.
DISCLAIMER: codice
non testato, pensato per un S.O. che potrebbe
non essere il tuo, in ogni caso prima di provarlo fai un backup
