2013-08-06 110 views
1

我有一個程序通過串口與設備進行通信。然而,我在一節中遇到困難。當我運行計算的十六進制命令時,我得到了一個看起來像一個直角符號的東西。以下是兩段代碼(主要部分和功能)。C++/CLI中的十進制到十六進制函數

主要部分:

private: System::Void poll_Click(System::Object^ sender, System::EventArgs^ e) 
    { 
      int i, end; 
      double a = 1.58730159; 
      String^ portscan = "port"; 
      String^ translate; 
      std::string portresponse [65]; 
      std::fill_n(portresponse, 65, "Z"); 

      for (i=0;i<63;i++) 
      { 
       if(this->_serialPort->IsOpen) 
       { 
        // Command 0 generator 
        int y = 2; 
        y += i; 
        std::string command0[10] = {"0xFF", "0xFF", "0xFF", "0xFF", "0xFF", "0x02", dectohex(i), "0x00", "0x00", dectohex(y)}; 

        // The two "dectohex" values above is where I get the odd symbol 

        for (end=0;end<10;end++) 
        { 
         portscan = marshal_as<String^>(command0[end]); 
         this->_serialPort->WriteLine(portscan); 
        } 

        translate = (this->_serialPort->ReadLine()); 
        MarshalString(translate, portresponse [i]); 
        if(portresponse [i] != "Z") 
        { 
         comboBox7->Items->Add(i); 
        } 
        this->progressBar1->Value=a; 
        a += 1.58730159; 
       } 
      } 


    } 

功能:

string dectohex(int i) 
    { 
     string hexidecimal = ""; 
     char hex_string[10] = ""; 
     hexidecimal = sprintf (hex_string, "0x%02X", i); 
     return hexidecimal; 
    } 

我假設有一些相當簡單的,我很想念。任何和所有的幫助表示讚賞。


解決辦法: 每大衛偏航的指導。

string dectohex(int i) 
     { 
      char hex_array[10]; 
      sprintf (hex_array, "0x%02X", i); 
      string hex_string(hex_array); 
      return string(hex_string); 
     } 
+0

在編寫可讀的C++之前,必須學習如何拼寫十六進制。 –

+0

感謝您指出這一點,我一定錯過了這一點,試圖修補我的代碼。我很高興我在標題或說明中沒有錯過它。 – Andy

回答

2

sprintf返回值是不是字符串,因爲當前已編碼。這是寫入char*的字符數作爲第一個參數傳入。使用您傳入的字符緩衝區,並將char*轉換爲字符串對象。

string dectohex(int i) 
{ 
    char hex_string[10]; 
    sprintf (hex_string, "0x%02X", i); 
    return string(hex_string); 
} 
+0

謝謝!那樣做了。 – Andy

1

不要用sprintf ....
使用stringstream代替。

#include <sstream> 

string dectohex(int i) 
{ 
    stringstream str; 
    str << std::hex << i; 
    return str.str(); 
} 

得到確切的文字與你以前有:

str << "0x" << std::setfill('0') << std::setw(2) << std::hex << i; 
+0

真棒,我沒有得到奇怪的符號了,但現在我得到0和2.如果我正確地遵循這意味着dectohex函數不發送一個價值回到給予它(y在此案件)。有什麼我應該添加在功能本身來完成轉換/存儲的轉換? (我試過在MSDN上尋找stringstream來嘗試排除故障,然而,它幾乎沒有任何幫助) – Andy

+0

你是什麼意思? –

+0

@Andy我已經更新了答案,因此您會得到與以前完全相同的結果。 –

相關問題