Eu quero levar um número inteiro (que será <= 255), para uma representação de cadeia hexadecimal
por exemplo: eu quero 65
entrar e sair '\x41'
ou 255
sair '\xff'
.
Eu tentei fazer isso com o struct.pack('c',
65 )
, mas isso se complica com qualquer coisa acima, 9
pois ele deseja incluir uma única sequência de caracteres.
chr
não envolve ASCII, simplesmente pega um número e cria uma bytestring de um byte, onde o valor ordinal do byte é o número. As codificações ASCII e compatíveis com ASCII entram em jogo quando você escreve e exibe seqüências de caracteres.'A'
outra maneira de escrever e exibir'\x41'
. O questr
realmente importa é o fato de ter sessenta e cinco anos. Para tornar as coisas compreensíveis e utilizáveis por seres humanos, que muitas vezes torna-se um A.Isso converterá um número inteiro em uma sequência hexadecimal de 2 dígitos com o prefixo 0x:
fonte
Que tal
hex()
?Se você realmente quer ter
\
na frente, pode:fonte
repr(chr(255)) # '\xff'
também consegue issoExperimentar:
ou
A documentação do Python diz: "mantenha isso debaixo do seu travesseiro: http://docs.python.org/library/index.html "
fonte
Deixe-me adicionar este, porque às vezes você quer apenas a representação de um dígito:
E agora com as novas
f''
seqüências de formato que você pode fazer:fonte
Se você deseja compactar uma estrutura com um valor <255 (um byte não assinado, uint8_t) e terminar com uma sequência de um caractere, provavelmente está procurando o formato B em vez de c . C converte um caractere em uma string (não muito útil por si só) enquanto B converte um número inteiro.
(E sim, 65 é \ x41, não \ x65.)
A classe struct também manipulará convenientemente endianness para comunicação ou outros usos.
fonte
Observe que, para valores grandes,
hex()
ainda funciona (algumas outras respostas não):Python 2:
0x4354467b746f6f5f736d616c6c3f7dL
Python 3:
0x4354467b746f6f5f736d616c6c3f7d
Para uma mensagem RSA descriptografada, pode-se fazer o seguinte:
fonte
Isso funcionou melhor para mim
Altere (2) se desejar um número com uma largura maior (2 é para 2 caracteres hexadecimais), para que 3 forneça o seguinte
fonte
Eu queria um número inteiro aleatório convertido em uma seqüência hexadecimal de seis dígitos com um # no início. Para conseguir isso eu usei
fonte
"#%6x" % random.randint(0x0, 0xFFFFFF)
. (Há uma falta%
antes6
erandint
leva 2 parâmetros BAIXOS e bounds- superior)Com
format()
, conforme exemplos de formato , podemos fazer:fonte
Por exemplo:
fonte
Além disso, você pode converter qualquer número em qualquer base para hexadecimal. Use este código de uma linha aqui, é fácil e simples de usar:
hex(int(n,x)).replace("0x","")
Você tem uma string
n
que é o seu número ex
a base desse número. Primeiro, altere-o para inteiro e, em seguida, para hexadecimal, mas o hexadecimal é0x
o primeiro a serreplace
removido.fonte
Como uma representação alternativa, você poderia usar
fonte