需要时间将utf8转换为十六进制字符串,然后向后转换 我找到了一些例子和可能的解决方案,但是只有没有特殊字符才能正常工作。 我有一个下载:
string in =“áéíóúñü”
结果应该是:
“c3a1c3a9c3adc3b3c3bac3b1c3bc”
我尝试关注帖子和其他人:
C++ convert string to hexadecimal and vice versa
How to convert a string in hexadecimal string?
http://www.cplusplus.com/forum/beginner/161703/
我会尽力解释,但我不会说英语。遗憾。
我必须使用socket发送一些数据。为此我必须使用UTF-8将名称转换为十六进制,但在某些情况下有特殊字符,例如á,é,í...... 转换普通字母时,每个字母的字符串长度为2。
A-> “61”
E-> “65”
但是特殊字符的编码(在UTF-8上)长度为4
A-> “c3a1”这是正确的转换
E-> “c3a9”这是正确的转换
我试图转换我发现的所有方式,包括那些暗示我的方式。但每次你转换一个特殊字符给我一个2位数的答案,这是不正确的。
A-> “e1”这不正确
E-> “e9”这不正确
答案 0 :(得分:0)
循环遍历std::string
对象中的每个“字符”,输出它的两位十六进制等效值为int
。
对于循环,我建议您查看range-based for loops。
要设置要打印的位数,请阅读setting stream precision。
要将数字打印为十六进制,请阅读the base I/O manipulators。
转换为int
阅读static_cast
。
哦,我建议使用unsigned char
作为单个“字符”。
基于以上原因的简单解决方案:
std::string stoh(std::string const& in)
{
std::ostringstream os;
for(unsigned char const& c : in)
{
os << std::hex << std::setprecision(2) << std::setw(2)
<< std::setfill('0') << static_cast<int>(c);
}
return os.str();
}