我必须从套接字接收UDP数据包。在此数据包小时内,min和sec作为UNSIGNED CHAR发送。当我在char []中收到它并放入TextBox进行显示时,它不会显示发送的实际数据,而是显示不同的值。
char buffer[10];
udpSocketRxCDP->readDatagram(buffer, sizeof(buffer));
ui->textEditsec->setText(buffer[2]);
请建议我如何获取实际数据。
答案 0 :(得分: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);
答案 1 :(得分:0)
根据给定的信息,您可能希望明确地将unsigned char
转换为char
。
考虑一些可能的数据被破坏。但是,除非您确实需要,否则可以直接以signed char
的形式发送数据。但我们不知道这是不是一个好的选择。