如何将十六进制转换为字符串? C ++

时间:2013-11-01 11:39:59

标签: c++ arrays string hex

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

我的阵列:

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

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

谢谢!

7 个答案:

答案 0 :(得分:3)

晚会,但由于使用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();

答案 1 :(得分:1)

使用: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
}

答案 2 :(得分:1)

std::bitset<16> foo(HEX_bufferMessage[0]);
std::string s = foo.to_string();

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

答案 3 :(得分:0)

std::to_string怎么样?

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

答案 4 :(得分:0)

这样的事情?

const char *hex = "0123456789ABCDEF";

unsigned char x = 0xF8;

std::cout << "0x" << hex[x >> 4 & 0xF] << hex[x & 0xF] << std::endl;

答案 5 :(得分:0)

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

答案 6 :(得分:-1)

我会把它作为评论,但不幸的是我还没有足够的分数。

在谷歌上快速搜索,我找到了这个链接:C++ convert hex string to signed integer