如何从套接字中读取unsigned char

时间:2014-01-22 17:26:44

标签: c sockets unsigned

我必须从套接字接收UDP数据包。在此数据包小时内,min和sec作为UNSIGNED CHAR发送。当我在char []中收到它并放入TextBox进行显示时,它不会显示发送的实际数据,而是显示不同的值。

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

请建议我如何获取实际数据。

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的形式发送数据。但我们不知道这是不是一个好的选择。