Question

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;
}

Je dois copier le port dans un uint32_t.Il imprime que le port est nul.

MODIFIERAppel de fonction :char* tmp;uint8_t je;je = 9 ;port uint16_t ;port = 1234 ;tmp = createMSG(i,port);

Sortir:MSG créé :identifiant:2 accepter :0 port 0

Était-ce utile?

La solution

J'étais copié cette fonction, mais sous 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;
}

appel:

createMSG(9,1234);  

printf résultat:

created SV_CON_REP: id: 2 accept: 9 port 210

(1234= 0x04d2, où 0xd2= 210)

Vous n'êtes toujours pas copié Call & Printf Résultat, mais votre propre commentaire

Autres conseils

Que diriez-vous de *((uint_16*)(buff+2)) dans printf?

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top