Лучший способ разделить шестнадцатеричный в python?

Я довольно новичок в шестнадцатеричном в общем, и у меня есть приложение, в котором мне нужно разделить шестнадцатеричное число. Например, учитывая число 0x607F, мне нужно будет вернуть высокий (0x60) или низкий (0x7F) байт.

Это может быть реализовано, но он чувствует себя немного cloogy. Есть ли более стандартный способ сделать это в python?

def byte(integer,highlow): assert highlow=='high' or highlow=='low' if highlow=='high': return hex(int(bin(integer)[:-8],2)) if highlow=='low': return hex(int(bin(integer)[-8:],2)) 

3 Solutions collect form web for “Лучший способ разделить шестнадцатеричный в python?”

Это возвращает старший байт и младший байт как кортеж:

 def bytes(integer): return divmod(integer, 0x100) 

Например:

 >>> high, low = bytes(0x607F) >>> hex(high) '0x60' >>> hex(low) '0x7f' 

Кстати, в зависимости от того, для чего вам нужны байты, и откуда взялось целое число, могут быть гораздо лучшие способы сделать то, что вам нужно.

 def bytes(num): return hex(num >> 8), hex(num & 0xFF) bytes(0x607F) 

доходность

 ('0x60', '0x7f') 

Чтобы добавить к Ned ответ, который является вполне правильным, struct является мощным инструментом для извлечения байтов.

 >>> import struct >>> print("0x%2x 0x%2x\n" % tuple(struct.pack('<H',0x4355))) 0x55 0x43 

В этом примере «<» сообщает пакету интерпретации ввода как малознакомого , и «H» говорит, что ожидает 2-байтовое число. Struct создает объект байтов (на Python 3), который затем может быть преобразован в кортеж, чтобы удовлетворить параметры форматирования строки для% x, чтобы распечатать шестнадцатеричный.

Python 2.7 немного более громоздкий, только потому, что struct.pack помещает информацию в строку, которая должна быть разделена на ее символы :

 >>> print("0x%2x 0x%2x\n" % tuple([ ord(x) for x in struct.pack('<H',0x4355)])) 0x55 0x43 

Если вы действительно делаете что-то столь же простое, как этот пример, это, вероятно, слишком велико. Если вы используете больше значений или разных длин чисел, например, регистры, наблюдаемые с помощью микроконтроллера, или обмен данными с C или C ++, рассмотрите возможность использования struct, чтобы упростить споры с байтами.

    Interesting Posts

    Линейное время и квадратичное время

    Тесты Python от TensorFlow не работают

    «Добавление» новых шрифтов в Tesseract eng.traineddata

    Что такое E128 PEP8: линия продолжения с подступом для визуального отступа?

    Как ускорить работу matplotlib при построении и сохранении большого количества цифр?

    списки панд и групп

    синтаксис для создания словаря в другом словаре в python

    Как вы поймаете это исключение?

    Какой самый питоновский способ идентифицировать последовательные дубликаты в списке?

    Элемент добавления python lxml после другого элемента

    Вернуть изображение в браузер в python, cgi-bin

    Как сделать объекты Python постоянными в веб-приложении?

    Как избежать взаимоблокировки с инициализацией атрибутов класса с помощью блокировок, наследования и потоков в Python?

    Печать всех экземпляров класса

    SSL3_GET_SERVER_CERTIFICATE проверка сертификата завершена на Python при запросе (только) * .google.com

    Python - лучший язык программирования в мире.