Bem... continuando com o assunto "conversões", vamos passar para as bases numéricas.
Se você está começando agora neste mundo de bases numéricas e ainda não pegou a "manha" da coisa, sugiro que leia estas dicas que lhe serão muito úteis no entendimento.
Pois bem. Vamos começar com o mais fácil: base decimal.
Atribuindo um valor decimal:
>>> inteiro = 65535
>>> inteiro
65535
>>> type(inteiro)
<class 'int'>
Transformando em hexadecimal (vimos no post anterior):
>>> hexadecimal = hex(inteiro)
>>> hexadecimal
'0xffff'
>>> type(hexadecimal)
<class 'str'>
Transformando em binário:
>>> binário = bin(inteiro)
>>> binário
'0b1111111111111111'
>>> type(binário)
<class 'str'>
Transformando em octal:
>>> octal=oct(inteiro)
>>> octal
'0o177777'
>>> type(octal)
<class 'str'>
_____________________________________________
Para os apressadinhos, vou adiantar que há uma maneira de transformar um número decimal em hexadecimal em que o resultado é em binário (bytes) e não uma string como o hex(inteiro), mas a explicação darei em outra oportunidade:
Primeiro, importamos a biblioteca struct, depois usamos-na para a conversão:
LITTLE ENDIAN (default):
>>>import struct
>>> struct.pack('<l',inteiro)
b'\xff\xff\x00\x00'
BIG ENDIAN:
>>> struct.pack('>l',inteiro)
b'\x00\x00\xff\xff'
Então temos:
>>> binhex=struct.pack('>l',inteiro)
>>> type(binhex)
<class 'bytes'>
>>> binhex
b'\x00\x00\xff\xff'
_____________________________________________
Vamos agora partir para o octal:
Transformando em inteiro:
>>> octal='0o177777'
>>> inteiro=int(octal,8)
>>> inteiro
65535
>>> type(inteiro)
<class 'int'>
Transformando em hexadecimal. Nesse caso, temos que dar uma "roubadinha":
>>> octal='0o177777'
>>> hexadecimal=int(octal,8)
>>> octal='0o177777'
>>> hexadecimal=hex(int(octal,8))
>>> hexadecimal
'0xffff'
>>> type(hexadecimal)
<class 'str'>
A mesma "roubadinha" para binário:
>>> octal='0o177777'
>>> binário=bin(int(octal,8))
>>> binário
'0b1111111111111111'
>>> type(binário)
<class 'str'>
E por último, vamos para o binário:
Transformando em inteiro:
>>> binário='0b1111111111111111'
>>> inteiro=int(binário,2)
>>> inteiro
65535
>>> type(inteiro)
<class 'int'>
Transformando em hexadecimal (roubandinha):
>>> hexadecimal=hex(int(binário,2))
>>> hexadecimal
'0xffff'
>>> type(hexadecimal)
<class 'str'>
Transformando em octal (roubadinha):
>>> octal=oct(int(binário,2))
>>> octal
'0o177777'
>>> type(octal)
<class 'str'>
Este blog foi desenvolvido no intuito de auxiliar àqueles que estão iniciando no mundo do Python 3.x
Mostrando postagens com marcador hex. Mostrar todas as postagens
Mostrando postagens com marcador hex. Mostrar todas as postagens
sexta-feira, 10 de abril de 2015
CONVERSÕES ENTRE BASES: DECIMAL, HEXADECIMAL, INTEIRO, BINÁRIO E OCTAL
quinta-feira, 9 de abril de 2015
CONVERSÕES INTEIRO - HEXADECIMAL - INTEIRO
O ruim do Python 3.x é que a maioria dos resultados é dado como uma string.
Então se você, por exemplo, atribui um inteiro à uma variável e converte para Hexadecimal, terá uma string como retorno.
Observe:
>>> inteiro=64
>>> type(inteiro)
<class 'int'>
>>> hexadecimal=hex(inteiro)
>>> type(hexadecimal)
<class 'str'>
>>> inteiro
64
>>> hexadecimal
'0x40'
Nada mal, você pensa, afinal os valores estão certos. Porém os tipos não estão. Isso à princípio não faz muita diferença. Mas quando você começar a manipular esses dados, vai ter problemas certamente.
Bem... chega de Lero-Lero.
Vamos a algumas transformações:
String em inteiro:
>>> a = 'ac6cad'
>>> int(a,16)
11300013
Inteiro em string:
>>> b=11300013
>>> b
11300013
>>> hex(b)
'0xac6cad'
Para tirar o '0x' da string:
>>> hex(b).split('x')[1]
'ac6cad'
'split' é para "fatiar" a string. o ('x') é o pondo onde você irá fatiar, neste caso. Portanto, se você fizer:
>>> hex(b).split('x')
['0', 'ac6cad']
então a primeira posição [0] contém '0' e a segunda posição [1] contém ['ac6cad'].
Bem... espero ter ajudado no começo....
Qualquer outro tipo de conversão hex-int ou int-hex necessário, por favor, deixem um comentário que terei prazer em incluir neste tópico.
Então se você, por exemplo, atribui um inteiro à uma variável e converte para Hexadecimal, terá uma string como retorno.
Observe:
>>> inteiro=64
>>> type(inteiro)
<class 'int'>
>>> hexadecimal=hex(inteiro)
>>> type(hexadecimal)
<class 'str'>
>>> inteiro
64
>>> hexadecimal
'0x40'
Nada mal, você pensa, afinal os valores estão certos. Porém os tipos não estão. Isso à princípio não faz muita diferença. Mas quando você começar a manipular esses dados, vai ter problemas certamente.
Bem... chega de Lero-Lero.
Vamos a algumas transformações:
String em inteiro:
>>> a = 'ac6cad'
>>> int(a,16)
11300013
Inteiro em string:
>>> b=11300013
>>> b
11300013
>>> hex(b)
'0xac6cad'
Para tirar o '0x' da string:
>>> hex(b).split('x')[1]
'ac6cad'
'split' é para "fatiar" a string. o ('x') é o pondo onde você irá fatiar, neste caso. Portanto, se você fizer:
>>> hex(b).split('x')
['0', 'ac6cad']
então a primeira posição [0] contém '0' e a segunda posição [1] contém ['ac6cad'].
Bem... espero ter ajudado no começo....
Qualquer outro tipo de conversão hex-int ou int-hex necessário, por favor, deixem um comentário que terei prazer em incluir neste tópico.
Assinar:
Postagens (Atom)