2014-09-22 6 views
1

Привет, я изучаю модуль pySerial, поэтому его основной основой является hex.Как преобразовать hex в шестнадцатеричную строку ascii в python?

До сих пор у меня есть следующие понятия.

Байт Строка: "\ XDE"

Байт Массив:

>>> bytearray('\xde') 
bytearray(b'\xde') 
>>> a = bytearray('\xde') 
>>> a[0] 
222 
>>> hex(a[0]) 
'0xde' 

Hex строка: '\ XDE'

Hex: 0xDE

Нормальное представление: де

Теперь мне нужна Hex String to Hex и наоборот.

Также Hex или Hex String to Normal.

Желаю, чтобы у меня был самый простой ответ.

Update:

Я думаю, что я получил первоначальный ответ, кроме работы со строками. Но это выглядит действительно грязно.

>>> hex(int(binascii.hexlify('\xde'),16)) 
'0xde' 
+0

«... pySerial module, поэтому его основной основой является hex-ascii». Что? Нет, это не имеет смысла. –

+0

ну, это требует большого количества шестнадцатеричного сигнала. –

+0

Нет, не совсем. Обычно очень редко требуется шестнадцатеричное представление. –

ответ

1

Позвольте мне переписать немного.

У Вас есть байт (скажем b, с целочисленным значением 222 (в десятичной системе) или де (в шестнадцатеричном формате) или 276 в восьмеричной или 10111110 в двоичной системе.

Его шестнадцатеричная строка представление '0xde'

следующие инициализацые одинаково:

b = 222 
b = 0xde 

Вот преобразование (скажет s является строкой, s='0xde', т.е. шестнадцатеричной строки представления)

s = hex(b) 
b = int(s, 16) 

Редактировать на комментарий:

Если вы действительно хотите, чтобы иметь возможность принимать в качестве входных данных \xde, а также 0xde вы можете сделать:

b = int('0' + s[1:] if (s[0] == '\\') else s, 16) 

или непосредственно

b = int('0' + s[1:], 16) 

если вы уверены, что будете n когда-либо получаешь weird вход

+0

Спасибо, но это не работает на '\ xde' до 0xde –

+0

Вы правы, но зачем вы хотите использовать такое представление? * Правильное * шестнадцатеричное строковое представление для 222 - это '0xde',' \ xde' - это всего лишь способ записать произвольное значение байта в строку в качестве синонима для '\ 00de' или записать его непосредственно в bytearray. –

Смежные вопросы