【问题标题】:How can to convert hexadecimal to string? C++如何将十六进制转换为字符串? C++
【发布时间】:2013-11-12 14:39:46
【问题描述】:

我有一个十六进制数组,我需要将其转换为字符串。

我的数组:

// declaration
unsigned char HEX_bufferMessage[12];

// initialize
    HEX_bufferMessage[0] = 0xF0;
    HEX_bufferMessage[1] = 0x15;
    HEX_bufferMessage[2] = 0x31;
    HEX_bufferMessage[3] = 0x02;
    HEX_bufferMessage[4] = 0x03;
    HEX_bufferMessage[5] = 0x00;
    HEX_bufferMessage[6] = 0x00;
    HEX_bufferMessage[7] = 0xD1;
    HEX_bufferMessage[8] = 0xD1;
    HEX_bufferMessage[9] = 0x00;
    HEX_bufferMessage[10] = 0x00;
    HEX_bufferMessage[11] = 0xF7;

我只有十六进制格式的这些信息,我需要将它们转换为字符串。有谁知道我该怎么做??

谢谢!!

【问题讨论】:

  • 再一次,std::stringstream
  • 请注意HEX_bufferMessage 不是“十六进制数组”,它是unsigned char 的数组。十六进制只是一个 notation,在外部表示数字时使用的东西。在内存中,数字以二进制形式存储。您可以执行HEX_bufferMessage[0] = 240; 等等,并在内存中得到完全相同的结果。

标签: c++ arrays string hex


【解决方案1】:

派对迟到了,但由于使用 std::to_string() 的所有答案都无法将十六进制值输出为 hex 值,我建议您将它们发送到流中,您可以通过以下方式格式化输出std::hex:

std::cout << "0x" << std::hex << HEX_bufferMessage[0] << std::endl;

或者,如果你想在字符串中使用它:

std::string to_hex_string( const unsigned int i ) {
    std::stringstream s;
    s << "0x" << std::hex << i;
    return s.str();
}

甚至在一行中:

// ...
return (static_cast<std::stringstream const&>(std::stringstream() << "0x" << std::hex << i)).str();

【讨论】:

    【解决方案2】:
    std::bitset<16> foo(HEX_bufferMessage[0]);
    std::string s = foo.to_string();
    

    http://en.cppreference.com/w/cpp/utility/bitset/to_string

    【讨论】:

      【解决方案3】:

      使用:std::to_string

      for (size_t i =0 ; i<10; ++i)
      {
         std::string s { std::to_string(HEX_bufferMessage[i]) }; //ith element
         std::cout << s; //concatenate all s as per need
      }
      

      【讨论】:

        【解决方案4】:

        这样的?

        const char *hex = "0123456789ABCDEF";
        
        unsigned char x = 0xF8;
        
        std::cout << "0x" << hex[x >> 4 & 0xF] << hex[x & 0xF] << std::endl;
        

        【讨论】:

          【解决方案5】:

          std::to_string怎么样?

          喜欢

          std::string s;
          for (auto const& v : HEX_bufferMessage)
              s += std::to_string(v);
          

          【讨论】:

            【解决方案6】:
            char hex_string[12*2+1]; /* where 12 - is the number of you hex values, 2 - is 2 chars per each hex, and 1 is the final zero character */
            
            for(int i=0;i<12;++i) {
              sprintf(hex_string+i*2,"%x", HEX_bufferMessage[i]);
            }
            

            【讨论】:

              猜你喜欢
              • 2018-01-31
              • 2013-02-07
              • 2014-06-09
              • 2018-06-06
              • 1970-01-01
              • 2017-08-23
              • 2014-03-19
              • 2011-08-25
              相关资源
              最近更新 更多