gpt4 book ai didi

c++ - "string" "const unsigned char"和 "utf8proc_uint8_t"之间的转换问题

转载 作者:行者123 更新时间:2023-11-28 02:19:34 25 4
gpt4 key购买 nike

也许是个简单的问题,但我对 C++ 中的“字节数组”、指针和强制转换感到困惑。

请查看以下内容,让我知道修复它需要阅读的内容以及修复方法。它与utf8proc库有关。

const unsigned char *aa = (const unsigned char*)e.c_str();
utf8proc_uint8_t* a = utf8proc_NFC(aa);
char b = (char)a;
string d = string(b);

这里不需要错误消息就够糟糕了,但是 string(b) 行上没有构造函数字符串。

最佳答案

这里似乎有几个问题。最大的是作业:

char b = (char)a;

您正在做的是告诉编译器获取指针(内存位置)并将其转换为 char,然后将其分配给单个 char 值 b。所以你基本上会在 b 中有随机的乱码。

相反,如果你想把 a 当作一个基本的 char*,你会这样写:

char* b = (char*)a;

然后你可以使用字符串类:

string d = string(b);

或者你可以通过直接转换跳过几行:

string d = string((char*)a);

如果您不删除由 utf8proc_NFC() 调用返回的转换值,并且在转换后不进行错误检查,您还会在寻找一个令人头疼的问题。

另外,我将插入一个插件,用于使用一些匈牙利符号来区分指针(变量上的“p”前缀)。这很明显,您可以执行以下操作:

char tmp = *pStr;     // a single character (first in the string)
char tmp2 = pStr[1]; // a single character (second in the string)
char* pTmp = pStr; // a pointer to a null terminated string

但你永远不会看到:

char tmp3 = (char)pStr;     // compiles, but makes no sense to treat pointer as a character.

所以这是所有这一切的干净版本:

utf8proc_uint8_t* pUTF = utf8proc_NFC( (const unsigned char*)e.c_str() );
string strUTF;
if (pUTF)
{
strUTF = (char*)pUTF;
free pUTF;
}

关于c++ - "string" "const unsigned char"和 "utf8proc_uint8_t"之间的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33006218/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com