Я использую последовательное программирование для связи с устройством GPS. Я использую двоичный протокол для связи с ним. это работает таким образом, что при записи на устройство я получаю поток данных каждую 1 секунду. Моя проблема в том, что когда я опрашиваю эти данные и распечатываю их, я получаю символы ASCII вместо данных HEX. Мне нужно посмотреть шестнадцатеричные данные, чтобы я мог их проанализировать. это код, который я написал
int Open_UBX()
{
unsigned char PollPOSLLH[11] = {0xB5,0x62,0x06,0x01,0x03,0x00,0x01,0x02,0x01,0x0E,0x47};
write(fd,&PollPOSLLH,11);
}
int main(){
Open_UBX();
while (c!='q')
{
if (read(fd,&data,1)>0)
{
write(STDOUT_FILENO,&data,1); // if new data is available on the serial port, print it out}
if (read(STDIN_FILENO,&c,1)>0)
{
write(STDOUT_FILENO,&c,1); // if new data is available on the console, send it to the serial port
}
}
close(fd);
return(0);
}
Конечно, порт открыт и настройки настроены, но моя проблема в том, что данные не отображаются в шестнадцатеричном формате, поэтому я не могу разобрать его, я получаю только символы, которые я не понимаю
Вы можете использовать std :: hex. Вот небольшой пример:
int number = 23;
std::cout << std::hex << number << std::endl;
//result is 17
РЕДАКТИРОВАТЬ :
Подумав об этом немного больше, я вспомнил, что std :: hex устанавливает флаг, поэтому все числа, которые вы печатаете после однократного использования, будут напечатаны в шестнадцатеричном формате. Чтобы вернуться к десятичному типу, используйте std :: dec.
Пример :
int number = 23;
std::cout << std::hex << number << std::endl; //17
std::cout << number << std::endl; //also 17
std::cout << std::dec << number << std::endl; //23
Других решений пока нет …