我必須從套接字接收UDP數據包。在這個數據包小時內,min和sec作爲UNSIGNED CHAR發送。當我在char []中接收它並放入TextBox以顯示它時,它不顯示發送的實際數據,而是顯示不同的值。如何從套接字讀取無符號字符
char buffer[10];
udpSocketRxCDP->readDatagram(buffer, sizeof(buffer));
ui->textEditsec->setText(buffer[2]);
請建議我如何獲得實際數據。
我必須從套接字接收UDP數據包。在這個數據包小時內,min和sec作爲UNSIGNED CHAR發送。當我在char []中接收它並放入TextBox以顯示它時,它不顯示發送的實際數據,而是顯示不同的值。如何從套接字讀取無符號字符
char buffer[10];
udpSocketRxCDP->readDatagram(buffer, sizeof(buffer));
ui->textEditsec->setText(buffer[2]);
請建議我如何獲得實際數據。
有了一點給定的信息,你可能想明確地將unsigned char
轉換爲char
。 考慮一些數據可能被損壞。但是,除非您真的需要它,否則可以直接發送數據爲signed char
。儘管如此,我們無法知道這是不是一個好的選擇。
當您從套接字讀取時,您正在讀取原始數據。如果您將其讀入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);
發送什麼數據?調用'readDatagram'之後'buffer'的全部內容是什麼? – simonc