2014-01-22 3 views
1

Мне нужно получить UDP-пакет из сокета. В этот пакетный час min и sec отправляются как UNSIGNED CHAR. Когда я получаю его в char [] и помещаю в TextBox для отображения, он не отображает фактические данные, которые отправляются, а разные значения.Как читать unsigned char из сокета

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

Пожалуйста, предложите, как я могу получить фактические данные.

+1

Какие данные отправляются? И каково полное содержание 'buffer' после вызова' readDatagram'? – 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); 
Смежные вопросы