Как мне преобразовать шестнадцатеричную строку в int в Python?
Я могу иметь это как " 0xffff
" или просто " ffff
".
Без префикса 0x вам нужно явно указать базу, иначе нет способа сказать:
x = int("deadbeef", 16)
С префиксом 0x Python может различать шестнадцатеричное и десятичное автоматически.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Вы должны указать 0
в качестве основы, чтобы вызвать это поведение угадывания префиксов; пропустить второй параметр означает принять base-10.)
int("FFFF",16)
быть преобразованным в -1.int(hexString, 16)
делает трюк, и работает с и без префикса 0x:источник
Для любой заданной строки s:
источник
Чтобы преобразовать строку в int, передайте строку
int
вместе с базой, из которой вы конвертируете.Обе строки будут достаточны для преобразования следующим образом:
Позволяя
int
сделать выводЕсли вы передадите 0 в качестве базы,
int
будет выводить базу из префикса в строке.Без префикса шестнадцатеричного,
0x
,int
не имеет достаточно информации , с помощью которой угадать:литералы:
Если вы вводите исходный код или интерпретатор, Python сделает преобразование для вас:
Это не сработает,
ffff
потому что Python будет думать, что вы пытаетесь написать правильное имя Python:Числа Python начинаются с цифры, в то время как имена Python не могут начинаться с цифры.
источник
Добавим к ответу Дэна, приведенному выше: если вы предоставите функции int () шестнадцатеричную строку, вам нужно будет указать базу как 16, иначе она не будет думать, что вы дали ей правильное значение. Указание базы 16 не требуется для шестнадцатеричных чисел, не содержащихся в строках.
источник
Худший способ:
Пожалуйста, не делай этого!
Является ли использование eval в Python плохой практикой?
источник
eval
это также абсурдно медленно, вдобавок ко всем другим проблемам с ним.int(s,16)
возвратом неправильных значений, что вызывало некоторые серьезные проблемы с моей средой выполнения (int(hex(value),16) == int(value) >>> False
). предоставленная строкаeval()
была безопасной, а возвращаемое значение было правильным.Или
ast.literal_eval
(это безопасно, в отличие отeval
):Демо-версия:
источник
Параметр форматирования "% x"%, похоже, работает и в операторах присваивания. (Предполагается, что Python 3.0 и выше)
пример
источник
print(b)
будет выводить256
,100
аprint(c)
не выводить100
, нет256
. Также обратите внимание, чтоc
это строка, ноa
это не так, ваш ответ на самом деле преобразует int в строку, а не наоборот (вот о чем вопрос).Если вы используете интерпретатор python, вы можете просто ввести 0x (ваше шестнадцатеричное значение), и интерпретатор автоматически преобразует его для вас.
источник
Обрабатывает hex, восьмеричный, двоичный, int и float
Используя стандартные префиксы (то есть 0x, 0b, 0 и 0o), эта функция преобразует любую подходящую строку в число. Я ответил на это здесь: https://stackoverflow.com/a/58997070/2464381, но здесь есть нужная функция.
источник
В Python 2.7
int('deadbeef',10)
похоже, не работает.Следующие работы для меня:
источник
с префиксом «0x» вы также можете использовать функцию eval
Например
источник
ast.literal_eval
.