【问题标题】:how to convert python ‘s byte array to QByteArray?如何将python的字节数组转换为QByteArray?
【发布时间】:2013-06-02 13:01:14
【问题描述】:

我有一个 python 的字节数组 b=b'你好' 我想用它作为QtextStream的参数来创建一个QtextStream对象,但是QtextStream接受Qt的字节数组而不是Python的。我想知道有没有将python的字节数组转换为QByteArray?

我测试了下面的代码,好像不能这样。

>>> b=b'hello'
>>> from PyQt4.QtCore import *
>>> c=QTextStream(QByteArray(b)).readAll()
>>> c
''
>>>

【问题讨论】:

    标签: qt qt4 pyqt pyqt4 pyside


    【解决方案1】:

    我猜问题是 QByteArray 对象被构造,传递给 QTextStream 然后立即销毁。 QTextStream 不会复制数据,它只保留指向数据源的指针。由于源被破坏,无法再读取任何数据。在尝试使用您的代码的某些变体调用readAll() 时,我什至设法得到分段错误错误。因此,解决方案是将您的 QByteArray 对象存储在一个变量中,只要您需要它。

    >>> buf = QByteArray(b)
    >>> c = QTextStream(buf).readAll()
    >>> c
    PyQt4.QtCore.QString(u'hello')
    

    原始问题“如何将 python 的字节数组转换为 QByteArray?”不要参考你的问题。很容易看出它可以使用明显的方式完成:

    >>> QByteArray(b)
    PyQt4.QtCore.QByteArray('hello')
    

    【讨论】:

    • 您说“我什至在尝试使用您的代码的某些变体调用 readAll() 时遇到分段错误错误”您能告诉我您的代码吗?
    • 此代码使我的 Python 交互式 shell 崩溃:b = b'test'; c=QTextStream(QByteArray(b)); c.readAll()
    • 在这种情况下,这意味着尝试使用已删除对象的数据。如果有人编写与此代码等效的 C++ 代码,则可以观察到完全相同的行为。
    • PyQt5.QtCore.QByteArray().append('hello') 仅适用于 PyQT5 + Python 3.x
    • @Mark(以及任何其他尝试使用 PyQt5 的人):PyQt5.QtCore.QByteArray(b'hello') 也应该在这里工作。
    猜你喜欢
    • 1970-01-01
    • 2019-04-25
    • 2017-06-16
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 2017-08-31
    相关资源
    最近更新 更多