C++ std::hex和std::setw无法使用某些字符

C++ std::hex和std::setw无法使用某些字符,c++,string,utf-8,hex,C++,String,Utf 8,Hex,我要做的是将字符串的字节转换为十六进制格式。 基于(以及其他许多一致的)我尝试了以下代码: #包括 #包括 #包括 int main() { std::字符串inputText=u8“A7°”; std::stringstream-ss; //将字符串的每个字符打印为两个值上的十六进制 for(无符号整数i=0;i

我要做的是将字符串的字节转换为十六进制格式。
基于(以及其他许多一致的)我尝试了以下代码:

#包括
#包括
#包括
int main()
{
std::字符串inputText=u8“A7°”;
std::stringstream-ss;
//将字符串的每个字符打印为两个值上的十六进制
for(无符号整数i=0;iss正如Pete Becker在一篇评论中所暗示的,将负值转换为更大的整数会将高位填充为“1”。解决方案是首先将
字符转换为
无符号字符,然后再将其转换为
int

#include <string>
#include <iostream>
#include <iomanip>

int main()
{
    std::string inputText = "-12°C";
    // print every char of the string as hex on 2 values
    for (unsigned int i = 0; i < inputText.size(); ++i)
    {
       std::cout << std::hex << std::setfill('0')  
                 << std::setw(2) << (int)(unsigned char)inputText[i];
    }
}
#包括
#包括
#包括
int main()
{
标准::字符串inputText=“-12°C”;
//将字符串的每个字符打印为两个值上的十六进制
for(无符号整数i=0;istd::cout Post可以编写的编译、运行和显示问题的最小完整程序。它应该只需要大约六行代码。请注意,负值通常将其所有高位设置为1,在十六进制中显示为
f
s字符串。