2014-07-25 2 views
0

Mon but est de convertir une valeur binaire dans le format "bytestring" que python interprète comme. Exemple: 1111111111111111 serait 0xffff et, une fois interprété, serait représenté par \ xff \ xff \ xff. S'il y a une méthode plus directe de la conversion à ce format s'il vous plaît me faire savoir que ce serait l'idéal, à partir de maintenant, je suis en utilisant la force brute avec cette solution:Comment concaténer un échappement à une chaîne?

hexnum = hex(int("11110100111100001110110101111011",2)) 
hexstring = str(hexnum)[2:] 
finalstr = "" 
i = 0 
while(i<=len(hexstring)): 
    finalstr+= hexstring[i:i+2] 
    finalstr+= "\x" 
    i=i+2 

Mon problème est quand:

print repr(finalstr) 

Je reçois l'erreur

ValueError: invalid \x escape

Comment puis-je concaténer correctement l'évasion ou comment puis-je convertir une chaîne binaire dans l'hexagone bytearray utilisations python format?

Répondre

2

Vous pouvez utiliser comme binascii.unhexlify ce:

>>> import binascii 
>>> s = "11110100111100001110110101111011" 
>>> binascii.unhexlify(format(int(s, 2), 'x')) 
'\xf4\xf0\xed{' 
+0

Merci c'est parfait –

2

En Python 3:

v = int("11110100111100001110110101111011",2) 
v.to_bytes((v.bit_length() + 7) // 8, 'big') 

produit une valeur d'octets représentée par les bits:

>>> v = int("11110100111100001110110101111011",2) 
>>> v.to_bytes((v.bit_length() + 7) // 8, 'big') 
b'\xf4\xf0\xed{' 

Vous ne pouvez pas simplement préfixer la syntaxe \x; cela ne fonctionne que dans les littéraux de chaîne.

En Python 2, vous pouvez utiliser un bytearray() à la place, car il faut une liste d'entiers dans la gamme 0-255:

v = int("11110100111100001110110101111011",2) 
bytes_list = [] 
while v: 
    v, one_byte = divmod(v, 256) 
    bytes_list.append(one_byte) 
str(bytearray(bytes_list[::-1])) 

Démo:

>>> v = int("11110100111100001110110101111011",2) 
>>> bytes_list = [] 
>>> while v: 
...  v, one_byte = divmod(v, 256) 
...  bytes_list.append(one_byte) 
... 
>>> bytearray(bytes_list[::-1]) 
bytearray(b'\xf4\xf0\xed{') 
>>> str(bytearray(bytes_list[::-1])) 
'\xf4\xf0\xed{' 
Questions connexes