簡體   English   中英

如何在Python 3中將二進制字符串轉換為類似字節的對象?

[英]How to Convert Binary String to Byte-like Object in Python 3?

我的程序中有以下代碼行: TextV = base64.b64decode('0cQ+bNsObaw=')TextV值為b'\\xd1\\xc4>l\\xdb\\x0em\\xac' 然后運行此命令將TextV轉換為二進制文件:

TextVBin = ''.join(format(x, 'b') for x in bytearray(TextV))

並且TextVBin值為'11010001110001001111101101100110110111110110110110101100' 現在,我想再次將TextVBin格式轉換為TextV格式(即b'\\xd1\\xc4>l\\xdb\\x0em\\xac' ),但是我用b'\\xd1\\xc4>l\\xdb\\x0em\\xac'搜索,但找不到任何答案。 如何在Python 3中做到這一點?

我會用:

import struct
TextVBin = "{:b}".format(struct.unpack(">Q", TextV)[0])

將您的TextV轉換為二進制字符串。

但是,它會生成1101000111000100001111100110110011011011000011100110110110101100 ,這與您自己的輸出不同,但是我猜這是因為使用您自己的方法會為每個字節將前導0截斷。 所以你的方法是錯誤的。

使用結構: 1101000111000100001111100110110011011011000011100110110110101100

使用您的電話: 1101000111000100 111110 110110011011011 1110 110110110101100

然后將此二進制字符串轉換回字節:

int('1101000111000100001111100110110011011011000011100110110110101100', 2).to_bytes(8, 'big')

注意:根據您的示例,我假設您的TextVBin長8字節,且字節序大。 如果長度可變,我的答案將不適用。

問題是您的格式字符串會截斷前導零。 你應該用

TextVBin = ''.join('{:08b}'.format(x) for x in bytearray(TextV))

它將使用精確的8個二進制數字格式化每個字節。 然后,要扭轉,只需做

TextV = bytearray([int(TextVBin[i:i+8], 2) for i in range(0, len(TextVBin), 8)])

例如:

>>> import base64
>>> TextV = base64.b64decode('0cQ+bNsObaw=')
>>> TextV
b'\xd1\xc4>l\xdb\x0em\xac'
>>> TextVBin = ''.join('{:08b}'.format(x) for x in bytearray(TextV))
>>> TextVBin
'1101000111000100001111100110110011011011000011100110110110101100'
>>> TextV = bytearray([int(TextVBin[i:i+8], 2) for i in range(0, len(TextVBin), 8)])
>>> TextV
bytearray(b'\xd1\xc4>l\xdb\x0em\xac')

暫無
暫無

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

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