字符串到ASCII转换C ++

时间:2016-10-13 11:36:43

标签: c++

我有以下代码将std::string转换为ASCII十六进制输出,代码运行正常,但有一个小问题。它不会将空间转换为十六进制。我该如何解决这个问题。

#include <iostream>
#include <string>
#include <sstream>


int main(){

    std::string text = "This is some text 123...";`

    std::istringstream sin(text);
    std::ostringstream sout;
    char temp;
    while(sin>>temp){
        sout<<"x"<<std::hex<<(int)temp;
    }
    std::string output = sout.str();
    std::cout<<output<<std::endl;
    return 0;
}

2 个答案:

答案 0 :(得分:2)

默认情况下,

operator >>个流会跳过空白区域。这意味着当它击中你的字符串中的空格时,它只是跳过它并移动到下一个非空格字符。幸运的是,没有理由在这里使用stringstream。我们只能使用简单的ranged based for loop

int main()
{
    std::string text = "This is some text 123...";`

    for (auto ch : test)
        cout << "x" << std::hex << static_cast<int>(ch);

    return 0;
}

这会将字符串中的每个字符转换为int,然后将其输出到cout

答案 1 :(得分:2)

使用迭代器:

,而不是创建输入流的所有机制
template <class Iter>
void show_as_hex(Iter first, Iter last) {
    while (first != last) {
        std::cout << 'x' << std::hex << static_cast<int>(*first) << ' ';
        ++first;
    }
    std::cout << '\n';
}

int main() {
    std::string text = "This is some text 123...";
    show_ask_hex(text.begin(), text.end());
    return 0;
}

这避免了流输入的复杂性,特别是流提取器(operator>>)跳过空白的事实。