2014-01-22 2 views
1

소켓에서 UDP 패킷을 수신해야합니다. 이 패킷 시간에 분과 초가 UNSIGNED CHAR로 전송됩니다. char []에서 수신하고 표시하기 위해 TextBox에 넣었을 때 전송 된 실제 데이터는 표시되지 않지만 다른 값은 표시됩니다.소켓에서 서명되지 않은 문자를 읽는 방법

char buffer[10]; 
udpSocketRxCDP->readDatagram(buffer, sizeof(buffer)); 
ui->textEditsec->setText(buffer[2]); 

실제 데이터를 얻을 수있는 방법을 제안하십시오.

+1

어떤 데이터가 전송됩니까? 그리고'readDatagram'을 호출 한 후'buffer'의 전체 내용은 무엇입니까? – simonc

답변

0

약간의 정보 만 사용하면 unsigned charchar으로 명시 적으로 변환 할 수 있습니다. 일부 데이터 이 손상 될 수 있다고 생각하십시오. 그러나 실제로 필요하지 않는 한 데이터를 signed char으로 직접 보낼 수 있습니다. 좋은 선택인지 여부는 알 수 없습니다.

2

소켓에서 읽을 때 원시 데이터가 표시됩니다. 버퍼를 char[] 버퍼로 읽고 그대로 사용하면 데이터는 char으로 해석됩니다.

ui->textEditsec->setText((unsigned char) buffer[2]); 

을 또는 적절한 struct을 정의하고 그 대신에 형태 캐스트 : 그러니 것은 필요할 때 unsigned char에 데이터를 캐스트

struct mypkt 
{ 
    unsigned char hour; 
    unsigned char minute; 
    unsigned char second; 
    ... 
}; 

ui->textEditsec->setText(((mypkt*)buffer)->second); 

어느 쪽이든을 setText() 가정 실제로 입력으로 char* 문자열을 기대하고, 다음 사용 sprintf() 또는 문자열 서식을 지정하는 유사한 함수 :

char str[12]; 
sprintf(str, "%d", (int) ((mypkt*)buffer)->second); 
ui->textEditsec->setText(str);