我有以下代码将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;
}
答案 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>>
)跳过空白的事实。