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

Posted

技术标签:

【中文标题】如何显示十六进制数据而不是文本?【英文标题】:how to Display Hex data instead of text? 【发布时间】:2013-06-07 13:01:04 【问题描述】:

我正在使用串行编程与 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】:

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

【讨论】:

以上是关于如何显示十六进制数据而不是文本?的主要内容,如果未能解决你的问题,请参考以下文章

如何告诉 TortoiseHg 文件不是二进制文件?

在文本框中显示数据库中的十进制值

JAVA如何将二进制数转换成文件?

Kernprof(line_profiler):如何将结果输出为文本而不是二进制文件

如何更改 seaborn 联合图中的十六进制大小? (六角本身,而不是垃圾箱)

MariaDB / pymysql:数据在列中显示为十六进制值(0x5761746572 而不是“水”)