C++ 将文件中的utf-8字符转换为十六进制

C++ 将文件中的utf-8字符转换为十六进制,c++,windows,utf-8,C++,Windows,Utf 8,文本文件中有一些utf-8字符,我想处理它们并将它们转换为十六进制格式,将它们的十六进制值写入另一个文件,最好的方法是什么? 我知道wstring、wchar,但它们不能存储utf-8字符,char16和char32可以存储,但它们不支持iostream。一些人建议使用ICU图书馆,但要求是最好不要使用外部图书馆。如果你不想使用外部图书馆,那么你基本上有两种选择: 自己解析字节 如果文件小到可以放入内存,则可以使用MultiByteToWideChar。如果在外部有任何代码点,那么您必须处

文本文件中有一些utf-8字符,我想处理它们并将它们转换为十六进制格式,将它们的十六进制值写入另一个文件,最好的方法是什么?
我知道wstring、wchar,但它们不能存储utf-8字符,char16和char32可以存储,但它们不支持iostream。一些人建议使用ICU图书馆,但要求是最好不要使用外部图书馆。

如果你不想使用外部图书馆,那么你基本上有两种选择:

  • 自己解析字节

如果文件小到可以放入内存,则可以使用
MultiByteToWideChar
。如果在外部有任何代码点,那么您必须处理代理项对

如果您知道如何测试和移位字节中的位,那么自己解析也不难。Wikipedia有一个提供大部分细节的漂亮网站…

我希望它能有所帮助:

int ascii_至_utf8(无符号字符c,字符*输出)
{
int len=0;
charx=0;
if(c<128)
{
out[0]=c;
len=1;
}
其他的
{
out[0]=(c>>6)| 0xC0;
out[1]=(c&0x3F)| 0x80;
len=2;
}
回程透镜;
}

int utf8到ascii(无符号字符*c,字符*out) { int len=1; 如果(*c>0xC0) {
*out=((c[0]您需要深入了解utf-8。要回答您的问题,只需按顺序读取二进制文件并转储八位字节即可