2012-05-21 3 views
0
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; 
} 

Мне нужно скопировать порт в uint32_t. Он печатает этот порт Null.put uint16_t in uint32_t

EDIT Вызов функции: символ * TMP; uint8_t i; i = 9; uint16_t порт; порт = 1234; tmp = createMSG (i, порт);

Выход: создано MSG: ID: 2 принимаем: 0 порт 0

+0

можете ли вы показать, как вы называете эту функцию? – theWalker

+0

Вы можете скопировать результат printf(), а не ваш комментарий? – theWalker

+0

Готово. Могу ли я поместить нули в buff + 2/+ 3 и порт до конца? – user1324258

ответ

0

Я скопировал эту функцию, но под окнами.

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

вызов: результат

createMSG(9,1234); 

Printf:

created SV_CON_REP: id: 2 accept: 9 port 210 

(1234 = 0x04d2, где 0xd2 = 210)

вы еще не копируют называть & результат PRINTF, но собственный комментарий

+0

, кстати, измените любой символ на unsigned char. это может быть очень странная ошибка (но не в этом случае) – theWalker

+0

что после REM этой строки ?: memcpy (buff + 2 + 2 + 1, & tmp, sizeof (uint16_t)); – theWalker

+0

Я ошибся. Последняя memcpy не требуется. Это может даже вызвать ошибку, потому что мы выделили только 6 байтов. Поэтому нам нужно удалить эту строку memcpy (buff + 2 + 2 + 1, & tmp, sizeof (uint16_t)); – user1324258

0

Как о * ((uint_16 *) (бафф + 2)) в printf?

+0

Не работает. В других сообщениях бросок не требуется для получения правильных значений. Например, я могу получить id с * buff. – user1324258

+0

Да, но 'id'' 'uint_8', поэтому он вписывается в * buff; порт не работает. В любом случае точка спорная. –

+0

Hmm okey. Бросок не решает проблему, есть ли у вас какие-либо другие идеи? – user1324258

Смежные вопросы