2017-01-11 14 views
-2

Я использую python3.5 и я хочу, чтобы написать вывод я получаю в шестнадцатеричных байт (b'\x00', b'\x01' и т.д.) для питона строк с \x00 -> 0 и \x01 -> 1 и я это чувство, что это может быть сделано легко и в очень pythonic путь, но полчаса googling все еще заставляет меня думать, что самым легким было бы сделать словарь с картографированием вручную (мне на самом деле это нужно от 0 до 7).питон преобразования шестнадцатеричных двоичный в строку

Input Intended output 
b'\x00' 0 or '0' 
b'\x01' 1 or '1' 

т.д.

+1

Что ваш вклад и что предполагаемый выход? – Daniel

+1

'b' означает' bytes', а не двоичный. '\ x00' не является строкой' 0', а char с кодом '0', который не отображается, поэтому Python показывает свой код. – furas

+0

какой результат вы ожидаете с помощью 'b" \ x0F "' - '" F "или' "15" '? – furas

ответ

2

Не уверен, что если вы хотите этот результат, но попробовать его

output = [str(ord(x)) for x in output] 
+0

приятно, но будет проблема с '\ x0F' и аналогичным;) – furas

+1

ну ... он сказал:« Мне это действительно нужно от 0 до 7 »:) –

+0

хороший момент - я пропустил эту часть :) – furas

0

Если WIIL нужно преобразовать b"\x0F" в F затем использовать

print(hex(ord(b'\x0F'))[2:]) 

или с format()

print(format(ord(b'\x0F'), 'X')) # '02X' gives string '0F' 
print('{:X}'.format(ord(b'\x0F'))) # '{:02X}' gives string '0F' 
1

Байт-строка автоматически представляет собой список чисел.

input_bytes = b"\x00\x01" 
output_numbers = list(input_bytes) 
1

Вы только что искали?

for x in range(0,8): 
    (x).to_bytes(1, byteorder='big') 

Выход:

b'\x00' 
b'\x01' 
b'\x02' 
b'\x03' 
b'\x04' 
b'\x05' 
b'\x06' 
b'\x07' 

Или наоборот:

byteslist = [b'\x00', 
b'\x01', 
b'\x02', 
b'\x03', 
b'\x04', 
b'\x05', 
b'\x06', 
b'\x07'] 

for x in byteslist: 
    int.from_bytes(x,byteorder='big') 

Выход:

0 
1 
2 
3 
4 
5 
6 
7