【问题标题】:convert QString to Gbytes将 QString 转换为 GB
【发布时间】:2019-08-24 13:39:06
【问题描述】:

想要将 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();
}

【问题讨论】:

  • 我们可以假设它没有按预期工作吗?以何种方式?发生什么了?应该发生什么?另外,请提供更多代码上下文,发minimal reproducible example
  • 更新说明。
  • 您似乎更新了代码,但仍然没有描述。

标签: c qt gtk glib qstring


【解决方案1】:

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

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

重写你的代码,从 QByteArray data() 中获取 GByteArray 似乎更安全..

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

【讨论】:

    【解决方案2】:

    你必须改变的行:

    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);
    

    但是考虑一下。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-30
      • 2019-12-23
      • 2011-08-21
      • 2012-04-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多