我需要向字節字符串添加一些填充。這是我想出了:最簡潔,Pythonic在Python 3中將空字節表示爲二進制(字節)字符串的方法
if padding_len > 0:
data += bytes.fromhex('00') * padding_len
有代表在Python 3比bytes.fromhex('00')
一個空字節的一個更好的方式?
我需要向字節字符串添加一些填充。這是我想出了:最簡潔,Pythonic在Python 3中將空字節表示爲二進制(字節)字符串的方法
if padding_len > 0:
data += bytes.fromhex('00') * padding_len
有代表在Python 3比bytes.fromhex('00')
一個空字節的一個更好的方式?
>>> bytes.fromhex('00') == b'\x00'
True
>>> b'\x00' * 10
b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
編輯:
正如霍布斯在下面評論指出,這當然是可以使用的b'\0'
代替b'\x00'
和J-F-塞巴斯蒂安指出,這不是在這種情況下混亂。
但是我不會這樣做,無論如何。它在這方面當然可以用(如果這很重要,它可以節省兩個字符)。它甚至可以在最常見的其他上下文中工作,您在此爲C構建字符串並在末尾放置空字節。
但在最一般的情況下,它可能會導致混亂,因爲b'\0'
編譯器的解釋是高度依賴數據。換句話說,它根據零後的內容而變化。
>>> b'\0ABC' == b'\00ABC'
True
>>> b'\0ABC' == b'\000ABC'
True
>>> b'\0ABC' == '\0000ABC'
False
如果你在的時候並不是所有的腦細胞正在運作深夜調試,這是非常令人沮喪的有一個字符串的長度有變化,因爲你替換字符串中的字符。所有你必須做的,以避免這種情況總是使用兩個額外的字符。無論您使用\x00
(十六進制)還是\000
八進制 - 無論以下字符的值如何,這兩者都可以正常工作。
使用字節文字:'b'\ 0''。 'bytes(padding_len)'會給你* padding_len *字節(填充0) – falsetru