Como faço para converter uma string hex em int em Python?
Eu posso tê-lo como " 0xffff
" ou apenas " ffff
".
Sem o prefixo 0x, você precisa especificar a base explicitamente, caso contrário, não há como saber:
x = int("deadbeef", 16)
Com o prefixo 0x, o Python pode distinguir hex e decimal automaticamente.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(Você deve especificar 0
como base para invocar esse comportamento de adivinhação de prefixo; omitir o segundo parâmetro significa assumir a base 10.)
int("FFFF",16)
ser convertido para -1.int(hexString, 16)
faz o truque e trabalha com e sem o prefixo 0x:fonte
Para qualquer string s:
fonte
Para converter uma string em um int, passe a string para
int
junto com a base da qual você está convertendo.Ambas as strings serão suficientes para a conversão desta maneira:
Deixar
int
inferirSe você passar 0 como base,
int
inferirá a base do prefixo na cadeia.Sem o prefixo hexadecimal,
0x
,int
não tem informação suficiente com que adivinhar:literais:
Se você estiver digitando o código-fonte ou um intérprete, o Python fará a conversão para você:
Isso não funcionará
ffff
porque o Python pensará que você está tentando escrever um nome legítimo em Python:Os números do Python começam com um caractere numérico, enquanto os nomes do Python não podem começar com um caractere numérico.
fonte
Acrescentando à resposta de Dan acima: se você fornecer a função int () com uma sequência hexadecimal, terá que especificar a base como 16 ou não achará que deu um valor válido. A especificação da base 16 é desnecessária para números hexadecimais não contidos em cadeias.
fonte
A pior maneira:
Por favor, não faça isso!
Usar o eval no Python é uma má prática?
fonte
eval
também é absurdamente lento, além de todos os outros problemas.int(s,16)
retorno de valores impróprios, causando alguns problemas importantes no meu tempo de execução (int(hex(value),16) == int(value) >>> False
). a cadeia fornecidaeval()
era segura e o valor retornado era adequado.Ou
ast.literal_eval
(isso é seguro, diferenteeval
):Demo:
fonte
A opção do formatador '% x'% parece funcionar em declarações de atribuição também para mim. (Assumindo o Python 3.0 e posterior)
Exemplo
fonte
print(b)
produzirá256
, não100
eprint(c)
produzirá100
, não256
. Observe também quec
é uma string, masa
não é assim que sua resposta realmente converte um int em uma string, e não o contrário (é disso que se trata a pergunta).Se você estiver usando o interpretador python, basta digitar 0x (seu valor hexadecimal) e o intérprete o converterá automaticamente para você.
fonte
Lida com hex, octal, binário, int e float
Usando os prefixos padrão (ou seja, 0x, 0b, 0 e 0o), esta função converterá qualquer string adequada em um número. Eu respondi isso aqui: https://stackoverflow.com/a/58997070/2464381, mas aqui está a função necessária.
fonte
No Python 2.7,
int('deadbeef',10)
parece não funcionar.O seguinte funciona para mim:
fonte
com o prefixo '0x', você também pode usar a função eval
Por exemplo
fonte
ast.literal_eval
.