十进制到在C ++ / CLI十六进制功能(Decimal to Hexadecimal Funct

2019-10-18 11:19发布

我有一个通过串口的设备进行通信的程序。 我有一个但是部分困难。 我得到什么看起来像一个直角符号,当我通过计算十六进制的命令运行。 下面是代码(主部和功能)的两个部分。

主要部分:

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

Answer 1:

的返回值sprintf是不是一个字符串,因为当前已编码。 这是写入字符数char*已传递作为第一个参数。 使用您传递的字符缓冲区,和转换char*为字符串对象。

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


Answer 2:

不要用sprintf ....
使用一个字符串流来代替。

#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;


文章来源: Decimal to Hexadecimal Functions in C++/CLI
标签: c++ c++-cli