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
728x90
반응형
'Python' 카테고리의 다른 글
[Python] 객체 지향 프로그래밍(Object-Oriented Programming, OOP) (2) | 2023.03.06 |
---|---|
[Python] zip() (3) | 2023.02.21 |
[Python] 몫과 나머지 , divmod() (0) | 2023.02.21 |
[Python] 문자열을 날짜, 시간으로 변환하는 방법 (string to date, string to time) - strptime() (0) | 2023.02.03 |
[Python] 날짜, 시간을 문자열로 변환하는 방법 (date to string, time to string) - strftime (2) | 2023.02.03 |
댓글