将ASCII std :: string转换为hex

时间:2011-05-13 10:50:35

标签: c++ ascii

有一种简单的方法可以将ASCII std :: string转换为HEX吗?我不想将它转换为数字,我只想将每个ASCII字符转换为它的HEX值。输出格式也应该是std :: string。 即:“TEST”将是“0x54 0x45 0x53 0x54”或某种类似的格式。

我找到了这个解决方案,但也许有一个更好的解决方案(没有字符串到int到字符串的转换):

std::string teststring = "TEST";
std::stringstream hValStr;
for (std::size_t i=0; i < teststring.length(); i++)
{
    int hValInt = (char)teststring[i];
    hValStr << "0x" << std::hex << hValInt << " ";
}

谢谢,
/ mspoerr

2 个答案:

答案 0 :(得分:7)

如果你不关心0x,使用std::copy很容易做到:

#include <algorithm>
#include <sstream>
#include <iostream>
#include <iterator>
#include <iomanip>

namespace {
   const std::string test="hello world";
}

int main() {
   std::ostringstream result;
   result << std::setw(2) << std::setfill('0') << std::hex << std::uppercase;
   std::copy(test.begin(), test.end(), std::ostream_iterator<unsigned int>(result, " "));
   std::cout << test << ":" << result.str() << std::endl;
}

答案 1 :(得分:4)

我想,

This answer另一个问题可以满足您的需求。您必须为" "添加ostream_iterator作为分隔符参数,以获取字符之间的空格。