QByteArray和python bytes之間的轉換

來源:互聯網
上載者:User

pyside或者pyqt在pythonV3中,都不存在Qstring類型,取而代之的是python的str類型。但是QByteArray是存在的,在使用pyside的過程中,有可能會使用到QByteArray和python bytes類型之間的轉換。google了下,一般都是說QByteArray和bytes之間不用轉換,事實上,在使用Qdatastream>>bytes()時,會產生EOFERRO。如下代碼:

修改前
  • 先輸出

qdatasteam out(file)

out<<obj #obj是python的bytes對象

  • 然後讀入

qdatastring in(file)

obj=bytes()

in>>obj    #產生EOFERRO

修改後

經過一個下午的實驗終於ok了,代碼如下:

  • 先輸出

qdatasteam out(file)

out<<qbytearray(obj )#obj是python的bytes對象

#由於C++有隱式轉換,也可使是:

out<<obj

  • 然後讀入:

qdatastring in(file)

tmp=qbytearray()

in>>tmp

obj=bytes(tmp.data()) #現在讀入的obj就是開始儲存的二進位對象了

綜上:

輸出資料流時C++進行了隱式轉換,輸入資料流時C++沒有進行隱式轉換。不管怎麼樣,還是手動轉換最穩妥。

  • bytes--->qbytearray 是:

obj=bytes()

qbyte=qbytearray(obj)

  • qbytesarray---->bytes是:

qbyte=qbytearray()

obj=qbyte.data()或者obj=bytes(qbyte.data())

我是在序列化時,同時使用pickle和qt造成這個問題。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.