首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多字节字符数组转换为QChar数组

将多字节字符数组转换为QChar数组
EN

Stack Overflow用户
提问于 2019-04-05 09:34:09
回答 1查看 795关注 0票数 0

我有两个缓冲区(示例大小):

代码语言:javascript
复制
char c[512];
QChar q[256];

假设'c‘包含多字节字符串(UTF-8)。我需要把它转换成QChar序列,并把它放在'q‘中。我想我需要的一个很好的例子可能是MultiByteToWideChar函数。

重要:除了堆栈上的额外分配之外,此操作不应涉及任何显式或隐式内存分配。请不要回答,如果你不确定上面的意思。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 11:50:13

QChar只包含一个ushort成员,因此它的大小是sizeof(ushort)

QString上下文中,它表示UTF-16‘字符’(代码点)。

所以这都是关于编码的。

如果您知道您的char const *是与系统相同的UTF-16数据,那么只需复制它:

代码语言:javascript
复制
memcpy(q, c, 512);

如果要用QString数据初始化const char *,可以使用QString::fromRawData()将其解释为UTF-16。

代码语言:javascript
复制
QString strFromData = QString::fromRawData(reinterpret_cast<QChar*>(c), 256);
// where 256 is sizeof(c) * sizeof(char) / sizeof(QChar)

那么您甚至不需要QChar q[256]数组。

如果您知道您的数据是UTF-8,那么您应该使用QString::fromUtf8(),然后使用QString::constData()访问它的内部内存。

在UTF-8中使用QString,我不知道有什么方法可以完全防止堆分配。但上述方法只应该分配两次:一次用于QString的PIMPL,一次用于UTF-16字符串数据。

如果您的输入数据编码为UTF-8,则答案是No:您不能使用Qt转换它。

证明:查看qtbase/src/corelib/codecs/qutfcodec.cpp的源代码,我们看到所有用于编码/解码的函数都会创建、新的QString / QByteArray实例。没有任何函数像您的问题那样对两个数组进行操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55532354

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档