C语言 将 QString 转换为 GB



想要将QString转换为GBytes(glib(

我通过将QString转换为GByteArray并尝试了以下内容 将其释放到 GBytes

extern "C" {
#include <glib.h>
};
#include <QString>
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QString mylongstring = "HELLO_WORLD";
GByteArray *barr;
barr = g_byte_array_new ();
for (int i = 0; i < mylongstring.toLocal8Bit().count(); i++)
{
guint8 *charAt = (guint8*)mylongstring.at(i); //cant convert qchar to uint -> already crashes
g_byte_array_append (barr, (guint8*) charAt, 1); 
}
GBytes *gbytes = g_byte_array_free_to_bytes(barr); //should contain the (guint8*) data of mylongstring
return app.exec();
}

为什么不从QByteArray中获取GByteArray? 循环的目的是什么?

我认为您的投射导致了问题,因为它没有分配足够的字节,请检查这个:https://doc.qt.io/qt-5/qbytearray.html#data

重写你的代码,通过从QByteArray获取GByteArraydata()似乎更安全。

QByteArray _string2BA = mylongstring.toLocal8Bit();
char *data = new char[_string2BA.size() + 1];
strcpy(data, _string2BA.data());
GByteArray *barr;
barr = g_byte_array_new ();
barr = (GByteArray*)data;
GBytes *gbytes = g_byte_array_free_to_bytes(barr); //should contain the (guint8*) data of mylongstring

您必须更改的行:

guint8 *charAt = (guint8*)mylongstring.at(i);
g_byte_array_append (barr, (guint8*) charAt, 1);

guint8 charAt = (guint8)mylongstring.toLocal8Bit().at(i);
g_byte_array_append (barr, &charAt, 1);

但是考虑一下。

以 QByteArray 的形式返回字符串的本地 8 位表示形式。 如果字符串包含字符,则返回的字节数组未定义 本地 8 位编码不支持。 源

最新更新