sexta-feira, 10 de abril de 2015

CONVERSÕES ENTRE BASES: DECIMAL, HEXADECIMAL, INTEIRO, BINÁRIO E OCTAL

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'>

Um comentário:

  1. io genti, tudo bom. Eu quero comvertir decimal em octal e nao consigo preciso ajuda

    ResponderExcluir