UTF8 字符到十六进制值字符串
UTF8 char to hex value string
我需要一种方法将字符转换为十六进制值作为字符串。
我尝试了几种方法,但所有方法都忽略了 UTF8 字符。
例如:
取字符:
Ş
如果转换正确,它的十六进制值为 0x15E
但这段代码只是 returns 我 0x3F
这只是字符 ?
.
wchar_t mychar = 'Ş';
cout << hex << setw(2) << setfill('0')
<< static_cast<unsigned int>(mychar);
我找到了一个 javascript 函数,它正是我所需要的,但无法将其转换为 C++ Here
谢谢
问题是您将 char
文字分配给 wchar_t mychar
。因为 char 只有一个字节长,所以它不能存储字符 Ş
。您必须在文字前加上 L
,如下所示:
wchar_t mychar = L'Ş';
一篇关于 Unicode、编码等的非常好的文章是 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),作者是 Joel Spolsky。
即使您在它们前面加上 L,类型 wchar_t 也不能很好地处理国际字符集。
试试这个:
char16_t mychar16 {u'Ş'}; // Initialized with UTF-16 code
char32_t mychar32 {U'Ş'}; // Initialized with UTF-32 code
cout << showbase << hex << setw(12) << setfill('0')
<< std::setiosflags(ios::left | ios::hex)
<< static_cast<unsigned int>(mychar16) << endl;
结果:
0x15e0000000
适用于类型 wchar_t 的字符编码是实现定义的,因此它可能因编译器而异。
类型 char16_t 和 char32_t 更适合处理 Unicode 字符。
我需要一种方法将字符转换为十六进制值作为字符串。
我尝试了几种方法,但所有方法都忽略了 UTF8 字符。
例如:
取字符:
Ş
如果转换正确,它的十六进制值为 0x15E
但这段代码只是 returns 我 0x3F
这只是字符 ?
.
wchar_t mychar = 'Ş';
cout << hex << setw(2) << setfill('0')
<< static_cast<unsigned int>(mychar);
我找到了一个 javascript 函数,它正是我所需要的,但无法将其转换为 C++ Here
谢谢
问题是您将 char
文字分配给 wchar_t mychar
。因为 char 只有一个字节长,所以它不能存储字符 Ş
。您必须在文字前加上 L
,如下所示:
wchar_t mychar = L'Ş';
一篇关于 Unicode、编码等的非常好的文章是 The Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!),作者是 Joel Spolsky。
即使您在它们前面加上 L,类型 wchar_t 也不能很好地处理国际字符集。
试试这个:
char16_t mychar16 {u'Ş'}; // Initialized with UTF-16 code
char32_t mychar32 {U'Ş'}; // Initialized with UTF-32 code
cout << showbase << hex << setw(12) << setfill('0')
<< std::setiosflags(ios::left | ios::hex)
<< static_cast<unsigned int>(mychar16) << endl;
结果:
0x15e0000000
适用于类型 wchar_t 的字符编码是实现定义的,因此它可能因编译器而异。 类型 char16_t 和 char32_t 更适合处理 Unicode 字符。