uint32_t에 uint16_t를 넣으십시오
문제
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의 인쇄됩니다.
편집 함수 통화 : char * tmp; uint8_t i; I= 9; UINT16_T 포트; 포트= 1234; TMP= createmsg (i, port);
출력 : 생성 된 메시지 : ID : 2 수락 : 0 포트 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);
.
printf 결과 :
created SV_CON_REP: id: 2 accept: 9 port 210
.
(1234= 0x04D2, 여기서 0xD2= 210)
여전히 통화 및 printf 결과를 복사하지 않고 자신의 코멘트
다른 팁
printf
에서 * ((uint_16 *) (buff + 2)?
제휴하지 않습니다 StackOverflow