Преобразование шестнадцатеричной строки в int в Python

StackOverflow https://stackoverflow.com/questions/209513

  •  03-07-2019
  •  | 
  •  

Вопрос

Как преобразовать шестнадцатеричную строку в int в Python?

У меня может быть это как "0xffff" или просто "ffff".

Это было полезно?

Решение

Без префикс 0x, нужно явно указать базу, иначе невозможно сказать:

x = int("deadbeef", 16)

С префикс 0x, Python может автоматически различать шестнадцатеричные и десятичные числа.

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

(Ты должен указать 0 в качестве основы для запуска этого поведения по угадыванию префикса;пропуск второго параметра означает использование основания 10.)

Другие советы

int(hexString, 16) делает свое дело и работает с префиксом 0x и без него:

>>> int("a", 16)
10
>>> int("0xa",16)
10

Для любой заданной строки s:

int(s, 16)

Преобразование шестнадцатеричной строки в int в Python

Я могу иметь это как "0xffff" или просто "ffff".

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

Обе строки будут достаточны для преобразования таким образом:

>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535

Сдача в аренду int сделать вывод

Если вы передадите 0 в качестве базы, int выведет базу из префикса в строке.

>>> int(string_1, 0)
65535

Без шестнадцатеричного префикса, 0x, int не имеет достаточно информации, чтобы гадать:

>>> int(string_2, 0)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'

литералы:

Если вы вводите исходный код или интерпретатор, Python выполнит преобразование за вас:

>>> integer = 0xffff
>>> integer
65535

Это не будет работать с ffff потому что Python подумает, что вы вместо этого пытаетесь написать законное имя Python:

>>> integer = ffff
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined

Номера Python начинаются с цифрового символа, а имена Python не могут начинаться с цифрового символа.

Добавление к ответу Дэна выше:если вы предоставите функции int() шестнадцатеричную строку, вам придется указать основание как 16, иначе она не будет считать, что вы дали ей допустимое значение.Указание основания 16 необязательно для шестнадцатеричных чисел, не содержащихся в строках.

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid

Худший способ:

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

Пожалуйста, не делайте этого!

Является ли использование eval в Python плохой практикой?

Или ast.literal_eval (это безопасно, в отличие от eval):

ast.literal_eval("0xffff")

Демо:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 

В Python 2.7 int('deadbeef',10) кажется, не работает.

Для меня работает следующее:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0

Параметр форматирования '%x'%, похоже, работает и в операторах присваивания.(Предполагая, что Python 3.0 и более поздние версии)

Пример

a = int('0x100', 16)
print(a)   #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100

Если вы используете интерпретатор Python, вы можете просто ввести 0x (ваше шестнадцатеричное значение), и интерпретатор автоматически преобразует его для вас.

>>> 0xffff

65535

с префиксом «0x» вы также можете использовать функцию eval

Например

>>a='0xff'
>>eval(a)
255
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top