이번 포스팅에서는 파이썬에서 숫자를 특정 진수로 변환하는데 쓰이는 함수들에 대해 정리해 보려고 한다.
n진수 → 10진수
int('string', base)
- 첫 번째 인자로는 숫자로만 이루어진 문자열, 두 번째 인자로는 진법을 넘겨받음
- n진수 → 10진수로 변환해주며, 결과값은 문자열로 반환됨(반드시 정수로 변환한 다음 사용할 것)
10진수 → n진수
여기서부터는 10진수를 2, 8, 16진수로 변환하기 위한 함수들을 정리해볼 것이다.
bin(n)
- n을 2진수로 변환해주는 함수이며, 결과값은 문자열으로 반환됨
- 결과값: 0b~~~의 형태이고, 여기서 0b는 2진수를 의미함
- 0b를 지우기 위해서는 문자열의 slicing을 이용하면 됨 bin(n)[2: ]
-
bin(10)[2: ] # 1010
oct(n)
- n을 8진수로 변환해주는 함수이며, 결과값은 문자열으로 반환됨
- 결과값: 0o~~~의 형태이고, 여기서 0o는 8진수를 의미함
- 0o를 지우기 위해서는 문자열의 slicing을 이용하면 됨 oct(n)[2: ]
-
oct(10)[2: ] # 12
hex(n)
- n을 16진수로 변환해주는 함수이며, 결과값은 문자열으로 반환됨
- 결과값: 0x~~~의 형태이고, 여기서 0x는 16진수를 의미함
- 0x를 지우기 위해서는 문자열의 slicing을 이용하면 됨 hex(n)[2: ]
-
hex(10)[2: ] # a
10진수인 수를 2, 8, 16진수가 아닌 n진수로 변환하기 위해서는, 직접 로직 작성이 필요하다
직접 n진수로 바꾸는 로직을 작성해보기 위해 어떠한 방식으로 진수 변환이 이루어지는지 알아보자.
ex) 10진수 585를 16진수로 변환해보기
즉, 10진수 585를 16진수로 변환하면 249가 나온다.
이처럼 10진수 number를 base진법으로 변환하기 위해선, number를 몫이 0이 될 때까지 base 로 나누는 과정에서 나온 나머지들을 거꾸로 작성하면 되는 것이다.
이를 코드로 작성해보면, 다음과 같다.
10진수 → n진수 함수
def convert_base(number, base):
digits = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"a", "b", "c", "d", "e", "f", "g", "h", "i", "j",
"k", "l", "m", "n", "o", "p", "q", "r", "s", "t",
"u", "v", "w", "x", "y", "z"]
result = ""
while number>0:
number, res = divmod(number, base) # 몫, 나머지 반환
result = digits[res] + result # 나머지가 거꾸로 합쳐지기 때문에 나머지로 나온 수가 기존 문자열보다 앞에서 붙여짐
return result
참고
https://security-nanglam.tistory.com/508
'파이썬 문법' 카테고리의 다른 글
[알고리즘] 이진 탐색(Binary Search) (1) | 2024.04.01 |
---|---|
파이썬 re 모듈 search(), sub(), findall() (0) | 2024.03.26 |
파이썬 딕셔너리 get() update() popitem() (2) | 2024.03.15 |
파이썬 heapq (0) | 2024.03.02 |
파이썬 우선순위 큐 (Priority Queues) (1) | 2024.02.29 |