【发布时间】:2017-05-28 18:20:35
【问题描述】:
我正在尝试将字符串的字节转换为十六进制格式。
基于this answer(和许多其他一致的)我已经尝试过代码:
#include <sstream>
#include <iomanip>
#include <iostream>
int main ()
{
std::string inputText = u8"A7°";
std::stringstream ss;
// print every char of the string as hex on 2 values
for (unsigned int i = 0; i < inputText.size (); ++i)
{
ss << std::hex << std::setfill ('0') << std::setw (2) << (int) inputText[i];
}
std::cout << ss.str() << std::endl;
}
但是对于一些以 UTF 8 编码的字符,它不起作用。
例如,在包含以 UTF8 编码的度数符号 (°) 的字符串中,结果是:ffffffc2ffffffb0 而不是 c2b0。
现在我希望算法能够处理单个字节,而不管它们的内容如何,而且结果似乎忽略了setw(2) 参数。
为什么我会得到这样的结果?
(运行测试程序here)
【问题讨论】:
-
发布您可以编写的最小的完整程序,该程序可以编译、运行和显示问题。它应该只需要大约六行代码。请注意,负值通常会将其所有高位设置为 1,在十六进制中显示为
fs 的字符串。