colocar uint16_t em uint32_t
Pergunta
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;
}
Eu preciso copiar a porta em um uint32_t.Imprime essa porta é Nulo.
EDITAR Chamada da função:char* tmp;uint8_t i;i = 9;uint16_t porta;porta = 1234;tmp = createMSG(i,porto);
Saída:criado de ERRO:identificação:2 aceita:0 porto 0
Solução
Eu estava copiar esta função, mas sob o 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;
}
chamada:
createMSG(9,1234);
printf resultado:
created SV_CON_REP: id: 2 accept: 9 port 210
(1234 = 0x04d2, onde 0xd2=210)
você ainda não copie chamada & printf resultado, mas o seu comentário
Outras dicas
Como sobre *((uint_16*)(buff+2)) em printf
?
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow