[Python] 파이썬 2진수, 8진수, 10진수, 16진수 변환 총정리 bin(), oct(), hex(), str(), format 이용
본문 바로가기
Python/Python 공부 정리

[Python] 파이썬 2진수, 8진수, 10진수, 16진수 변환 총정리 bin(), oct(), hex(), str(), format 이용

by 쏠수있어ㅤ 2021. 6. 1.
반응형

 

   Python   

2진수, 8진수, 10진수, 16진수

파이썬은 10진수를 기본으로 한다.  때문에 다른 진수들의 수와 차별을 두기위해 각 진수의 수 앞에 아래 두 글자를 붙여 표현한다. 

 

2진수 : 0b 

8진수 : 0o

16진수 : 0x 

 

 

 

 

 1)   10진수 -----변환-----> 2진수, 8진수, 16진수   

 

1. 파이썬 자체 내장함수 이용 

 

영어의 앞 3글자에서 따온 함수명

2진수 : Binary 

8진수 : Octal

16진수 : Hexadecimal

 

bin(value) : 10진수 ---> 2진수 변환

oct(value) : 10진수 ---> 8진수 변환

hex(value) : 10진수 ---> 16진수 변환 

 

반환값 : 모두 문자열 

value = 100

B = bin(100)
O = oct(100)
H = hex(100)

print(B)  
print(O)
print(H)

print(type (B))  
print(type (O))
print(type (H))

 

 

 

 

 

 

 

2. format() 함수 이용

 

format(value, '#b')  : 10진수 ---> 2진수 변환

format(value, , '#o') : 10진수 ---> 8진수 변환

format(value, '#x')  : 10진수 ---> 16진수 변환 

 

10진수를 2,8,16진수로 바꾸는 두 가지 방법의 차이는 두 번째 방법은 #를 제거하면 수 앞에 붙었던

2진수 : 0b

8진수 : 0o

16진수 : 0x 

요 문자들을 삭제한 문자열 값을 반환한다. 

 

반환값 : 모두 문자열 

value = 100

B = format(100, '#b') # 10진수 -> 2진수
O = format(100, '#o') # 10진수 -> 8진수
H = format(100, '#x') # 10진수 -> 16진수

print(B)  
print(O)
print(H)

print(type (B))  
print(type (O))
print(type (H))

B = format(100, 'b') 
O = format(100, 'o')
H = format(100, 'x')

print(B)  
print(O)
print(H)

print(type (B))  
print(type (O))
print(type (H))

 

 

 

 

 

 

 

  2)  2진수 -----변환-----> 8진수, 10진수, 16진수   

 

각 변환하는 것도 위의 문법처럼 똑같이 하면 된다. 

2진수, 8진수, 16진수를 ----> 10진수로 변환할 때는 str(value) / format(value,#s) 를 쓴다. 

value = 0b1100100  #2진수의 값

print('----기본 함수로----')

O = oct(value) #8진수로
S = str(value) #10진수로
H = hex(value) #16진수로

print(O)  
print(S)
print(H)

print(type (O))  
print(type (H))
print(type (S))

print('----FORMAT 함수로----')

O = format(value, '#o')  #8진수로
S = format(value, '#d')  #10진수로
H = format(value, '#x')  #16진수로

print(O)  
print(S)
print(H)

print(type (O))  
print(type (S))
print(type (H))

print('---#빼고 숫자만 출력(but 문자열임)---')

O = format(value, 'o')  #8진수로
S = format(value, 'd')  #10진수로
H = format(value, 'x')  #16진수로

print(O)  
print(S)
print(H)

print(type (O))  
print(type (S))
print(type (H))

 

 

 

 

 

 

  3)  8진수 -----변환-----> 2진수, 10진수, 16진수   

 

8진수도 위와 동일하게 바꾸면 된다. 

value = 0o144  #8진수의 값

print('----기본 함수로----')

B = bin(value) #8진수 -> 2진수로
S = str(value) #8진수 -> 10진수로
H = hex(value) #8진수 -> 16진수로

print(B)  
print(S)
print(H)

print(type (B))  
print(type (S))
print(type (H))

print('----FORMAT 함수로----')

B = format(value, '#b')  #2진수로
S = format(value, '#d')  #10진수로
H = format(value, '#x')  #16진수로

print(B)  
print(S)
print(H)

print(type (B))  
print(type (S))
print(type (H))

print('---#빼고 숫자만 출력(but 문자열임)---')

O = format(value, 'b')  #2진수로
S = format(value, 'd')  #10진수로
H = format(value, 'x')  #16진수로
 
print(B)  
print(S)
print(H)

print(type (B))  
print(type (S))
print(type (H))

 

 

 

 

 

 

 

  4)  16진수 -----변환-----> 2진수, 8진수, 10진수   

value = 0x64  #16진수의 값

print('----기본 함수로----')

B = bin(value) #16진수 -> 2진수로
O = oct(value) #16진수 -> 8진수로
S = str(value) #16진수 -> 10진수로

print(B)  
print(O)
print(S)

print(type (B))  
print(type (O))
print(type (S))

print('----FORMAT 함수로----')

B = format(value, '#b')  #2진수로
O = format(value, '#o')  #8진수로
S = format(value, '#d')  #10진수로

print(B)  
print(O)
print(S)

print(type (B))  
print(type (O))
print(type (S))


print('---#빼고 숫자만 출력(but 문자열임)---')

B = format(value, 'b')  #2진수로
O = format(value, 'o')  #8진수로
S = format(value, 'd')  #10진수로
 
print(B)  
print(O)
print(S)

print(type (B))  
print(type (O))
print(type (S))

 

 

 

 

 

기타 % 포매팅을 사용한 방식

* 요 값은 앞에 0x / 0o 값이 안붙는다. 

10진수를 % 포매팅으로 사용하면 2진수 모두 오류, 8진수 %o 가능 %x 16진수 모두 가능했다. 

 

 

 

 

 

input 받는게 16진수라면? int() 쓰는 법 

n = int(a, 16) -> a가 16진수니까 고려해서 정수로 변환해 , 그리고 n 변수에 담아 ! 라는 뜻 

 

 

 

 

 

 

2,8,16진수 제외하고 다른 진수로 바꾸는 방법 

10진수 -----> n진수로 바꾸는 방법 

1. while 사용

def solution(n):
  tmp = ''
  while n:
    tmp = str(n%5)+tmp
    n = n//5

  print(int(tmp))

solution(10)

10진수를 5진수로 바꾸기 

위의 코드 중 5의 자리에 2,3,4,5,6, ~ 진수를 넣고 실행하면 된다. 

 

2. 함수 사용 

import string

tmp = string.digits + string.ascii_lowercase

def convert(num, base):
  q,r = divmod(num,base)
  if q == 0:
    return tmp[r]
  else:
    return convert(q,base) + tmp[r]

print(convert(10,5))

 

 

 

n 진수 --> 10진수로 바꾸는 방법

int('스트링 숫자', 바꿀 n진수) 를 사용하면 된다 ! 

#int(string, base) 사용 ! 

print(int('100',2))
print(int('200',3))
print(int('300',4))
print(int('400',5))
print(int('500',6))
print(int('eee',16))

 

 

 

** 주의사항 : 위의 모든 예시의 반환되는 모든 값은 문자열 ! 

반응형

댓글