0

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

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

4

1 回答 1

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
于 2013-06-07T13:03:38.340 回答