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 中。它打印端口为空。

编辑 函数调用:char* tmp; uint8_t 我;我 = 9; uint16_t 端口;端口 = 1234;tmp = createMSG(i,port);

输出:创建的味精:id:2 接受:0 端口 0

4

2 回答 2

0

*((uint_16*)(buff+2))printf怎么样?

于 2012-05-21T21:15:54.450 回答
0

我是复制这个功能,但是在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;
}

称呼:

createMSG(9,1234);  

打印结果:

created SV_CON_REP: id: 2 accept: 9 port 210

(1234 = 0x04d2,其中 0xd2=210)

您仍然没有复制 call & printf 结果,而是您自己的评论

于 2012-05-21T22:17:24.333 回答