簡體   English   中英

如何在Python中以與py2和py3一起使用的方式定義二進制字符串?

[英]How to define a binary string in Python in a way that works with both py2 and py3?

我正在編寫一個應該在Python 2和3中工作的模塊,我需要定義一個二進制字符串。

通常這會像data = b'abc'但是這個代碼在Python 2.5上失敗,語法無效。

如何以適用於所有Python 2.5+版本的方式編寫上述代碼

注意:這必須是binary (它可以包含任何類型的字符,0xFF),這非常重要。

我會推薦以下內容:

from six import b

當然,這需要六個模塊 如果您不想這樣,這是另一個版本:

import sys
if sys.version < '3':
    def b(x):
        return x
else:
    import codecs
    def b(x):
        return codecs.latin_1_encode(x)[0]

更多信息

這些解決方案(基本相同)工作,干凈,速度與您將獲得的一樣快,並且可以支持所有256字節值(這里沒有其他解決方案)。

如果字符串只有ASCII字符,請調用encode 這將為您提供Python 2中的str (就像b'abc' )和Python 3中的一個bytes

'abc'.encode('ascii')

如果沒有,不是將二進制數據放在源中,而是創建一個數據文件,用'rb'打開它並從中讀取。

您可以存儲base64編碼的數據。

第一步是轉換為base64:

>>> import base64
>>> base64.b64encode(b"\x80\xFF")
b'gP8='

這將完成一次,使用b或不使用取決於您使用的Python版本。

在第二步中,將此字節字符串放入沒有b的程序中。 然后確保它在py2和py3中工作。

import base64
x = 'gP8='
base64.b64decode(x.encode("latin1"))

給你一個str '\\x80\\xff'在2.6(也應該在2.5中工作)和一個b'\\x80\\xff'在3.x.

除了上述兩個步驟之外,您可以使用十六進制數據執行相同的操作

import binascii
x = '80FF'
binascii.unhexlify(x) # `bytes()` in 3.x, `str()` in 2.x

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM