10진법의 수를 다른 진법의 수로 바꿀 때, python에서 2진수, 8진수, 16진수로 바꾸는 함수는 아래와 같다.
bin(123)
>>> 0b1111011
oct(123)
>>> 0o173
hex(123)
>>> 0x7b
그 외 진법의 수는 안타깝게도 직접 만들어서 작성을 해야한다.
함수를 작성해서, 함수(10진법 수, 원하는 진수)를 하면 return 값으로 원하는 진수로 나타낸 값이 나오게 된다.
# 10진수를 n진수로 변환!
def convert_to_base_n(decimal_number, base):
convert_string = "0123456789ABCDEF"
if decimal_number < base:
return convert_string[decimal_number]
else:
return convert_to_base_n(decimal_number//base, base) + convert_string[decimal_number%base]
print(convert_to_base_n(15, 16)) # F가 출력됨
우리가 익히알고 있는 int()함수를 이용하면 쉽게 n진수를 10진수로 변환시킬 수 있다.
int(str(변화시키려는 n진수의 숫자), n진수)
아래의 예처럼 사용하면 된다.
print(int('101', 2))
print(int('202', 3))
print(int('303', 4))
print(int('404', 5))
print(int('505', 6))
print(int('606', 7))
print(int('707', 8))
print(int('808', 9))
print(int('abc', 16))
결과는 아래와 같다.
5
20
51
104
185
300
455
656
2748
앞서 사용한 10진수의 n진수 변환 코드를 이용할텐데, 방법은 기존 n진수를 10진수로 변환 시켜 준 뒤, n' 진수로 변환 시켜주는 방법이다.
# 10진수를 n진수로 변환!
def convert_to_base_n(decimal_number, base):
convert_string = "0123456789ABCDEF"
if decimal_number < base:
return convert_string[decimal_number]
else:
return convert_to_base_n(decimal_number//base, base) + convert_string[decimal_number%base]
이 방법을 이용해 아래는 6진수를 10진수로 변환한 뒤 9진수로 변환 시키는 예시이다.
print(convert_to_base_n(int('12345',6),9)) # 2502출력됨