프로그래밍에서는 숫자를 다양한 진법으로 변환해서 사용합니다. 특히 네트워크 프로그램에서는 데이터를 16진수로 변환해서 주고받습니다. 그 외 다양한 곳에서 진수 변환이 이루어집니다. 오늘은 파이썬에서 제공하는 함수들을 이용해서 진수 변환 방법을 알아보겠습니다. 샘플은 10진수와 2, 8, 16진수 간의 변환 방법들입니다.
◎ 1. 10진수 -> 2진수, 8진수, 16진수 내장함수 이용해서 전환 |
▼ 10진수는 내장함수 bin(), oct(), hex() 을 이용해서 진수별로 변환할 수 있습니다. 반환 완료한 값의 자료형은 문자열인 string 타입입니다.
bin() : 10진수 -> 2진수
oct() : 10진수 -> 8진수
hex() : 10진수 -> 16진수
a = 200
print(f"10진수 : {a}")
b = bin(a)
print(type(b))
print(f"2진수 : {b}")
c = oct(a)
print(f"8진수 : {c}")
d = hex(a)
print(f"16진수 : {d}")
[결과]
10진수 : 200
<class 'str'>
2진수 : 0b11001000
8진수 : 0o310
16진수 : 0xc8
▼ 10진수에서 반환한 각 문자열에서 접두어를 통해 진수를 구분할 수 있습니다. 접두어는 숫자 0 과 각 진수의 영어 단어에 해당하는 소문자 하나로 구성합니다.
- 2진수 : 0b(binary)
- 8진수 : 0o(octadecimal)
- 16진수 : 0x(hexadecimal)
◎ 2. 10진수 -> 2진수, 8진수, 16진수 format 함수를 통한 변환 |
▼ 다음은 format 함수를 이용하는 방법입니다. 진수 변환 후 접두어를 출력하는 방법과 접두어를 제외한 문자열을 반환하는 방법 두 가지가 있습니다. 예제처럼 # 을 추가하면 0b, 0o, 0x 접두어를 포함한 문자열을 반환합니다.
a = 200
# 접두어 포함
b = '{:#b}'.format(a)
print(f"2진수 : {b}")
c = '{:#o}'.format(a)
print(f"8진수 : {c}")
d = '{:#x}'.format(a)
print(f"16진수 : {d}")
b = format(a, '#b')
print(f"2진수 : {b}")
c = format(a, '#o')
print(f"8진수 : {c}")
d = format(a, '#x')
print(f"16진수 : {d}")
[결과]
2진수 : 0b11001000
8진수 : 0o310
16진수 : 0xc8
2진수 : 0b11001000
8진수 : 0o310
16진수 : 0xc8
▼ 두 번째는 접두어를 반환하지 않는 방법입니다. 두 번째 매개변수에 # 특수문자를 제외합니다. format 함수의 두 번째 매개변수로 변환할 진수를 나타내는 영어 단어인 2진수(b), 8진수(o), 16진수(x) 를 입력합니다. 결과값은 접두어가 없는 문자열을 반환합니다.
# 접두어 제외
b = format(a, 'b')
print(f"2진수 : {b}")
c = format(a, 'o')
print(f"8진수 : {c}")
d = format(a, 'x')
print(f"16진수 : {d}")
[결과]
2진수 : 11001000
8진수 : 310
16진수 : c8
◎ 3. 2진수, 8진수, 16진수 -> 10진수로 변환하기 |
▼ 다음은 int 내장함수를 이용해서 역으로 2, 8, 16진수를 10진수로 변환하는 방법입니다. 형식은 int(문자열, 진수) 와 int(숫자) 두 가지가 있습니다. int(문자열, 진수) 는 첫 번째 매개변수로 각 진수에 해당하는 문자열을 입력하고, 두 번째 매개변수로 변환하고자 하는 진수를 숫자로 입력합니다.
# int 함수를 이용한 변환
a = "0b11001000"
print("2진수 -> 10진수 : ", int(a, 2))
b = "0o310"
print("8진수 -> 10진수 : ", int(b, 8))
c = "0xc8"
print("16진수 -> 10진수 : ", int(c, 16))
[결과]
2진수 -> 10진수 : 200
8진수 -> 10진수 : 200
16진수 -> 10진수 : 200
▼ 만약 첫 번째 매개변수에 문자열을 입력하지 않으면 오류가 발생합니다.
# int 함수를 이용한 변환
a = 0b11001000
print("2진수 -> 10진수 : ", int(a, 2))
[결과]
Traceback (most recent call last):
File "D:/Project/Workspace/workspace-python/tensorflow-sample/notstop/python/trans_sample.py", line 45, in <module>
print("2진수 -> 10진수 : ", int(a, 2))
TypeError: int() can't convert non-string with explicit base
▼ 두 번째인 int(숫자) 형식은 문자열이 아닌 진수 변환한 값을 int() 함수의 매개변수로 입력합니다.
a = 0b11001000
print("2진수 -> 10진수 : ", int(a))
b = 0o310
print("8진수 -> 10진수 : ", int(b))
c = 0xc8
print("16진수 -> 10진수 : ", int(c))
[결과]
2진수 -> 10진수 : 200
8진수 -> 10진수 : 200
16진수 -> 10진수 : 200
▼ 마지막으로 print() 함수를 이용해서 10진수를 출력하는 것도 가능합니다. 값을 print 함수의 매개변수로 입력하면 10진수로 변환할 수 있습니다.
a = 0b11001000
print(f"2진수 -> 10진수 : {a}")
b = 0o310
print(f"8진수 -> 10진수 : {b}")
c = 0xc8
print(f"16진수 -> 10진수 : {c}")
[결과]
2진수 -> 10진수 : 200
8진수 -> 10진수 : 200
16진수 -> 10진수 : 200
'파이썬 Python' 카테고리의 다른 글
파이썬(Python) 클립보드 제어하기 (2) | 2024.09.08 |
---|---|
파이썬(Python) PyQt5 QFrame 구현하기 (3) | 2024.09.05 |
파이썬(Python) bool 자료형, 참과 거짓(True/False) 판단하기 (0) | 2024.09.05 |
파이썬(Python) print 함수와 문자열 포맷으로 출력하기 (1) | 2024.09.01 |
파이썬(Python) OpenCV 파일 읽기와 저장하기 (1) | 2024.08.28 |
파이썬 Python Flask no module named xxxx 에러 해결하기 (0) | 2024.08.25 |
파이썬(Python) Flask 이미지 서버에 올리기 (0) | 2024.08.25 |
파이썬(Python) 설치 라이브러리 확인하기 (0) | 2024.08.24 |