0

GPS デバイスとの通信にシリアル プログラミングを使用しています。 GPS デバイスとの通信にバイナリ プロトコルを使用しています。デバイスに書き込むときに、1秒ごとにデータのストリームを受信するように機能します。私の問題は、このデータをポーリングして印刷すると、HEX データではなく ASCII 文字を受け取ることです。解析できるように、16 進データを表示する必要があります。これは私が書いたコードです

  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);
}

もちろん、ポートは開いていて、設定は構成されていますが、私の問題は、データが16進数で表示されないため、解析できないことです。理解できない文字しか取得しません

4

1 に答える 1

5

std::hex を使用できます。ここに小さな例があります:

int number = 23;
std::cout << std::hex << number << std::endl;
//result is 17

編集:もう少し考えた後、 std::hex がフラグを設定することを思い出したので、一度使用した後に出力するすべての数値は16進数形式で出力されます。10 進数に戻すには、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 に答える