UDP를 사용하여 네트워크에서 데이터를 수신하고 구문 분석하려고합니다. 여기 UDP는 데이터를 unsigned char로 수신합니다.
는19 ffb0 0 0 ff88 d 38 19 48 38 0 0 2 1 3 1 ff8f ff82 5 40 20 16 6 6 22 36 6 2c 0 0 0 0 0 0 0 0
하지만 출력 등을 기대하고,
19 b0 0 0 88 d 38 19 48 38 0 0 2 1 3 1 8f 82 5 40 20 16 6 6 22 36 6 2c 0 0 0 0 0 0 0 0
ff
가 존재하지 않아야 코드, 출력 인쇄
char recvline[1024];
int n=recvfrom(sockfd,recvline,1024,0,NULL,NULL);
for(int i=0;i<n;i++)
cout << hex <<static_cast<short int>(recvline[i])<<" ";
입니다 인쇄 된 출력.
사실 나는 각각의 문자에 따라이 데이터를 구문 분석해야
처럼,
parseCommand(recvline);
및 구문 분석 코드가 보인다
void parseCommand(char *msg){
int commId=*(msg+1);
switch(commId){
case 0xb0 : //do some operation
break;
case 0x20 : //do another operation
break;
}
}
을 그리고 난에 commId=-80
무엇입니까 디버깅하는 동안 손목 시계.
참고 : 리눅스에서 내가 코드 성공적인 결과를 얻기 내가 읽기 버퍼에 대한 unsigned char
대신 char
를 사용한 점에 유의하고있다.
unsigned char recvline[1024];
int n=recvfrom(sockfd,recvline,1024,0,NULL,NULL);
경우이 오류를 구축 제공
unsigned
로 두 번째 인수를 허용하는, 그래서 당신이 올바른 값을 받고 수 있습니다처럼
char
'짧은 int'대신 'uint8_t'로 캐스트하면 어떻게됩니까? – Arunmu
@Arunmu 그건 작동하지 않습니다. 소리는'uint16_t'이어야합니다. –
'uint16_t'는 같은 결과를 출력합니다. – Haris