Metti UINT16_T in UINT32_T
Domanda
char* createMSG(uint8_t i,uint16_t port) {
char *buff;
buff = (char*) calloc(1,6);
uint8_t id, tmp;
tmp = 0;
id = 2;
memcpy(buff, &id, sizeof(uint8_t));
memcpy(buff+1, &i, sizeof(uint8_t));
memcpy(buff+2, &port, sizeof(uint16_t));
memcpy(buff+2+2, &tmp, sizeof(uint16_t));
memcpy(buff+2+2+1, &tmp, sizeof(uint16_t));
printf("created SV_CON_REP: id: %d accept: %d port %d\n",*buff,*(buff+1),* (buff+2)); return buff;
}
.
Ho bisogno di copiare la porta in un UINT32_T.Stampa che la porta è null.
Modifica Chiamata funzione: Char * TMP; UINT8_T I; I= 9; UINT16_T PORTA; porto= 1234; tmp= createmsg (i, porto);
Uscita: MSG creato: ID: 2 Accetta: 0 Porta 0
Soluzione
Sono stato copia questa funzione, ma sotto Windows.
uint8_t = BYTE
uint16_t = WORD
char* createMSG(BYTE i,WORD port)
{
char *buff;
BYTE id, tmp;
buff = (char*) calloc(1,6);
tmp = 0;
id = 2;
memcpy(buff, &id, sizeof(BYTE));
memcpy(buff+1, &i, sizeof(BYTE));
memcpy(buff+2, &port, sizeof(WORD));
memcpy(buff+2+2, &tmp, sizeof(WORD));
memcpy(buff+2+2+1, &tmp, sizeof(WORD));
printf("created SV_CON_REP: id: %d accept: %d port %d\n",*buff,*(buff+1),* (buff+2)); return buff;
}
.
Chiamata:
createMSG(9,1234);
.
Printf Risultato:
created SV_CON_REP: id: 2 accept: 9 port 210
.
(1234= 0x04d2, dove 0xd2= 210)
Non è ancora copia il risultato Call & Printf, ma il tuo commento
Altri suggerimenti
Che ne dici * ((UINT_16 *) (BUFF + 2)) in printf
?
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow