Tiny Finger Point Hand With Heart
본문 바로가기
Python

[Python] 진법변환

by yoondii 2023. 2. 21.
728x90
반응형

파이썬의 함수를 사용해서 쉽게 진법 변환이 가능하다.


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) :
    x, y = divmod(num, base)
    if x == 0 :
        return tmp[y] 
    else :
        return convert(x, base) + tmp[y]

위의 함수를 작성하여 쓰면 된다. (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) :
    x, y = divmod(num, base)
    if x == 0 :
        return tmp[y] 
    else :
        return convert(x, base) + tmp[y]

위의 함수를 다시 이용.

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

tmp에 적어준 코드는 문자열과 소문자를 더해준 것이다.

공식문서를 확인하면 더 정확하게 알 수 있다.

https://docs.python.org/ko/3/library/string.html

 

string — Common string operations

Source code: Lib/string.py String constants: The constants defined in this module are: Custom String Formatting: The built-in string class provides the ability to do complex variable substitutions ...

docs.python.org

 

728x90
반응형

댓글