본문 바로가기
Language_/python

[Python] 진법 변환 총 정리?!

by 낭람_ 2020. 12. 20.
반응형

[Pyhton 진법 변환]

 

n진수  → 10진수

python에서는 기본적으로 int() 라는 함수를 지원합니다.

int(string, base)

위와 같은 형식으로 사용하면 됩니다.  base에는 진법을 넣으면 됩니다.

print(int('111',2))
print(int('222',3))
print(int('333',4))
print(int('444',5))
print(int('555',6))
print(int('FFF',16))

 

7
26
63
124
215
4095

이렇게 10진수로 쉽게 변경이 가능합니다.

 

 

10진수  → 2, 8, 16진수

2, 8, 16진수는 bin(), oct(), hex() 함수를 지원합니다.

    * 결과는 모두 string 입니다.

print(bin(10))
print(oct(10))
print(hex(10))

 

0b1010
0o12
0xa

0b는 2진수, 0o는 8진수, 0x는 16진수를 의미합니다. 앞의 진법 표시를 지울려면 [2:]를 하면 됩니다.

print(bin(10)[2:])
print(oct(10)[2:])
print(hex(10)[2:])

 

1010
12
a

 

 

10진수  → n진

10진수에서 다른 진법으로 변환은 아쉽게도 직접 코드를 작성해야 합니다.

import string

tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r] 
    else :
        return convert(q, base) + tmp[r]

위의 함수를 작성하여 쓰면 됩니다. (tmp에 소문자를 다 넣었기 때문에 16진법 이상도 가능합니다.)

print(convert(10,2))
print(convert(10,3))
print(convert(10,4))
print(convert(10,5))

 

1010
101
22
20

 

 

n진수  → n진수

위에 썻던것들을 활용해서 n진수를 10진수로 변경하고 다시 n진수로 변경하면 됩니다.

import string

tmp = string.digits+string.ascii_lowercase
def convert(num, base) :
    q, r = divmod(num, base)
    if q == 0 :
        return tmp[r] 
    else :
        return convert(q, base) + tmp[r]

위의 함수를 다시 이용합니다.

print(convert(int('a',16),2))
print(convert(int('4',5),3))
print(convert(int('2',3),4))
print(convert(int('11',2),5))

 

1010
11
2
3

 

 

 

반응형

댓글