如何显示十六进制数据而不是文本?

时间:2013-06-07 13:01:04

标签: c++ hex polling

我使用串行编程与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);
}

当然端口是打开的并且设置已配置但是我的问题是数据没有显示为十六进制所以我无法解析它我只得到我不理解的字符

1 个答案:

答案 0 :(得分:5)

您可以使用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