将 C++ std::string 转换为另一个 std::string 的最简单方法是什么,它转义了所有不可打印的字符?
例如,对于两个字符的字符串 [0x61,0x01],结果字符串可能是“a\x01”或“a%01”。
看看Boost的字符串算法库 http://www.boost.org/doc/libs/1_42_0/doc/html/string_algo.html。您可以使用它的is_print http://www.boost.org/doc/libs/1_42_0/doc/html/string_algo/quickref.html#id1721600分类器(连同它的运算符!重载)来挑选出不可打印的字符,及其查找格式() http://www.boost.org/doc/libs/1_42_0/doc/html/string_algo/usage.html#id1718682函数可以用您想要的任何格式替换它们。
#include <iostream>
#include <boost/format.hpp>
#include <boost/algorithm/string.hpp>
struct character_escaper
{
template<typename FindResultT>
std::string operator()(const FindResultT& Match) const
{
std::string s;
for (typename FindResultT::const_iterator i = Match.begin();
i != Match.end();
i++) {
s += str(boost::format("\\x%02x") % static_cast<int>(*i));
}
return s;
}
};
int main (int argc, char **argv)
{
std::string s("a\x01");
boost::find_format_all(s, boost::token_finder(!boost::is_print()), character_escaper());
std::cout << s << std::endl;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)