2014-01-22 40 views
1

我必須從套接字接收UDP數據包。在這個數據包小時內,min和sec作爲UNSIGNED CHAR發送。當我在char []中接收它並放入TextBox以顯示它時,它不顯示發送的實際數據,而是顯示不同的值。如何從套接字讀取無符號字符

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

請建議我如何獲得實際數據。

+1

發送什麼數據?調用'readDatagram'之後'buffer'的全部內容是什麼? – simonc

回答

0

有了一點給定的信息,你可能想明確地將unsigned char轉換爲char。 考慮一些數據可能被損壞。但是,除非您真的需要它,否則可以直接發送數據爲signed char。儘管如此,我們無法知道這是不是一個好的選擇。

2

當您從套接字讀取時,您正在讀取原始數據。如果您將其讀入char[]緩衝區並按原樣使用,則數據將被解釋爲char。因此,無論在需要時將數據類型強制轉換爲unsigned char

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

或定義合適struct和強制轉換到相反:

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);