1

在它的Qt文档中QDataStream

QDataStream 类提供二进制数据到 QIODevice 的序列化。

所以这就是我想要做的。我想将 Python 3.X 上 PySide 中的字节发送到QDataStream.

writeRawData但是期望unicode作为输入。

import zlib
from PySide import QtCore

file = QtCore.QFile("test.dat")
file.open(QtCore.QIODevice.WriteOnly)

data = "some text"
compressed_data = zlib.compress(data.encode()) # type is now bytes

out = QtCore.QDataStream(file)
out.writeRawData(compressed_data)

给出一个TypeError

TypeError: 'PySide.QtCore.QDataStream.writeRawData' called with wrong argument types:
  PySide.QtCore.QDataStream.writeRawData(bytes)
Supported signatures:
  PySide.QtCore.QDataStream.writeRawData(unicode, int)

此外,PySide (1.2.2) 没有实现 from writeBytesQDataStream

那么,如何QDataStream在 PySide 和 Python 3.X 中通过 a 发送二进制数据?


背景:最后我想QSocket通过a方便地将二进制数据发送到a QDataStream,并且我想在使用之前对其进行压缩zlib

4

1 回答 1

1

我可以回答我自己的问题。解决方案是将字节字符串包装在 a 中QByteArray并使用 . 的左移/右移运算符QDataStream

写作示例:

# wrap data (type byte) in QByteArray
bytearray = QtCore.QByteArray(data)

# write to data stream
qdatastream << bytearray

阅读示例:

# allocate empty qbytearray
bytearray = QtCore.QByteArray()

# read from data stream
qdatastream >> bytearray
于 2014-10-09T08:08:20.957 回答