Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何迭代std::string以获得一组Freetype FT_ULong?_C++_String_Freetype - Fatal编程技术网

C++ 如何迭代std::string以获得一组Freetype FT_ULong?

C++ 如何迭代std::string以获得一组Freetype FT_ULong?,c++,string,freetype,C++,String,Freetype,std::string通常被解释为UTF8,因此具有可变长度编码。在我的字体渲染器中,我遇到了一个问题,我不知道如何从std::string中获取一个“字符”,并将其转换为FreetypeFT\u ULong,以便获得具有FT\u get\u Char\u索引的字形。也就是说,我不确定我所做的是否“正确”,因为我只是在迭代std::string并将结果字符转换过来(当然这是不正确的,尽管它适用于我的操作系统默认设置) 那么,有没有一种“正确”的方法来做到这一点,更重要的是,有没有人编写了一个库来

std::string
通常被解释为UTF8,因此具有可变长度编码。在我的字体渲染器中,我遇到了一个问题,我不知道如何从std::string中获取一个“字符”,并将其转换为Freetype
FT\u ULong
,以便获得具有
FT\u get\u Char\u索引的字形。也就是说,我不确定我所做的是否“正确”,因为我只是在迭代
std::string
并将结果字符转换过来(当然这是不正确的,尽管它适用于我的操作系统默认设置)


那么,有没有一种“正确”的方法来做到这一点,更重要的是,有没有人编写了一个库来实现这种“正确”的方法,我可以使用现成的方法?

您应该首先检查UTF8是如何编码的,并且知道什么样的起始位和多少字节

然后您可以编写如下代码:

  if ((byte & 0x80) == 0x00) {
    // 1 byte UTF8 char
  }
  else if ((byte & 0xE0) == 0xC0) {
    // 2 bytes UTF8 char
  }
  else if ...

然后,您可以使用正确的字节重复std::string中的每个UTF8字符。

您知道如何编码吗?只要从字符串中读取下一个“字符”,您就会知道当前代码点需要多少字节,以及如何将其解析为任何其他编码。或者您也可以将其转换为UTF-16(甚至UTF-32)。标准中没有任何内容,但ICU、glib,请参见此处:(ICU将是最有力的选择,但它是一个相当大的选择beast@leemes:UTF-16也是一种可变长度编码。我想知道是否有一个简单的函数可以将UTF8转换为32位(无符号长).虽然我读的UTF8最多可以有6个字节,这似乎有点过多,但出于所有实际目的…我想我还需要一个函数来确定字符串的格式是否正确。