나는 C 프로그래밍에 새로 온 사람과 내가 받아 다음과 같이 포맷 된 UDP 패킷을 처리하는 코드 테스트 해요 :이 테스트에C UINT16 올바르게하려면 어떻게해야합니까?
UINT16 port1
UINT16 port2
에 해당하는 값은 다음과 같습니다
6005
5555
을 내가 전체 패킷 버퍼를 인쇄 할 경우이 같은 뭔가를 얻을 :
u^W³^U><9e>^D
unsigned int
으로 처리해야합니다. 그래서 이런 식으로 시도했습니다 :
int l = 0;
unsigned int *primaryPort = *(unsigned int) &buffer[l];
AddToLog(logInfo, "PrimaryPort: %u\n", primaryPort);
l += sizeof(primaryPort);
unsigned int *secondaryPort = *(unsigned int) &buffer[l];
AddToLog(logInfo, "SecondaryPort: %u\n", secondaryPort);
l += sizeof(secondaryPort);
그러나 8 자리 숫자가 잘못되었습니다.
나는 심지어 다음과 같은 또 다른 접근법을 시도했지만 잘못된 번호도 얻는다.
int l = 0;
unsigned char primaryPort[16];
snprintf(primaryPort, sizeof(primaryPort), "%u", &buffer[l]);
AddToLog(logInfo, "PrimaryPort: %d\n", primaryPort);
l += sizeof(primaryPort);
unsigned char secondaryPort[16];
snprintf(secondaryPort, sizeof(secondaryPort), "%u", &buffer[l]);
AddToLog(logInfo, "SecondaryPort: %d\n", secondaryPort);
l += sizeof(secondaryPort);
내가 뭘 잘못하고있어? 또한 왜 char 문자열 변수를 해제해야하지만 int 변수를 사용하지 않아도됩니까?
C에 대해 묻는다면 왜 C++과 C#이 태그 안에 있습니까? – n0rd
시스템에서'unsigned int'는 사실 16 비트 정수가 아니며'sizeof (unsigned int)! = 2'입니다. 그리고'* (unsigned int)와 buffer [l]'은 정수를 가리키는 포인터를 캐스팅하고 그 정수를 역 참조하려고 시도하는 것은 의미가 없습니다 (그리고 컴파일 할 수 없습니다). –
"또한 char 문자열 변수를 해제해야하는 이유는 무엇입니까?하지만 int 변수를 사용하지 않아도됩니까?" 'free'를 호출해야하는지 아닌지는 변수의 타입이 무엇인지에 대한 문제가 아닙니다. –