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입니다.uint16_t를 uint32_t에 넣으십시오.

편집 함수 호출 : char * tmp; uint8_t i; i = 9; uint16_t 포트; 포트 = 1234; tmp = createMSG (i, port);

출력 : 생성 MSG : ID : 2 동의 : 0 포트 0

+0

이 함수를 어떻게 호출하는지 보여줄 수 있습니까? – theWalker

+0

귀하의 의견이 아니라 printf()의 결과를 복사 할 수 있습니까? – theWalker

+0

완료. 버프 + 2/+ 3에 0을 놓고 끝까지 가져갈 수 있습니까? – 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

, char를 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

어떻게 printf에서 * 약 ((uint_16 *) (버프 + 2))?

+0

작동하지 않습니다. 다른 메시지에서 캐스트는 올바른 값을 얻는 데 필요하지 않습니다. 예. 아이디에 * 버프로 액세스 할 수 있습니다. – user1324258

+0

예,하지만'id'는'uint_8'이므로 * buff에 맞습니다; 포트는 그렇지 않습니다. 어쨌든 요점은 논쟁 거리입니다. –

+0

흠. 캐스트가 문제를 해결하지 못했지만 다른 아이디어가 있습니까? – user1324258