c - 如何从套接字读取无符号字符

标签 c sockets unsigned

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

char buffer[10];
udpSocketRxCDP->readDatagram(buffer, sizeof(buffer));
ui->textEditsec->setText(buffer[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);

关于c - 如何从套接字读取无符号字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21289744/

相关文章:

android - 制作一个 Android Studio JNI 静态库以供 JNI 读取

c - Speller - 卸载特里树 - 功能无法正常工作

javascript - "socket.io.js"文件位于哪里?

java - Android套接字客户端不工作

c++ - 有效地将 unsigned short 转换为 char*

C - Linux 字符设备 openat() 返回 EINVAL

java - 套接字通信协议(protocol)/标准

汇编 x86 寄存器有符号或无符号

c - 32 位和 64 位之间的无符号减去无符号差

c - 理解inotify示例中的对齐语句