bash script2021. 2. 19. 16:36

 

반달가면 이글루에서 백업 - bahndal.egloos.com/503597

 

수 계산에 유용한 bc 명령을 이용하면 10진수를 2진수나 16진수로, 또는 그 반대로 변환할 수 있다. bc 명령에 대한 내용은 이전 게시물을 참고하자. 여기로 

 

일단 아래의 예시를 보자.

# 10진수를 2진수로 변환 (obase 변경)
echo "obase=2; 27" | bc
11011

bc에는 출력값과 입력값의 기수(base)를 설정하는 변수가 있는데, 각각 obase와 ibase이다. (기본적으로 10진수를 사용하므로 기본값은 둘 다 10이다.) obase 값을 2로 설정하면 출력값이 2진수로 표현된다. 반대로 2진수를 10진수로 변환하려면 ibase 값을 2로 설정하면 되겠다.

# 2진수를 10진수로 변환 (ibase 설정)
echo "ibase=2; 11011" | bc
27

# 2진수를 16진수로 변환
# obase 설정 이후 ibase 설정
echo "obase=16; ibase=2; 11011" | bc
1B

obase와 ibase를 둘 다 설정할 경우 obase 설정이 먼저 나와야 한다. 왜 그러냐 하면, 예를 들어 ibase를 먼저 2로 설정하면 그 다음에 obase를 설정할 때 입력할 값이 먼저 설정된 ibase 기준(즉 2진법)으로 되어야 하기 때문이다. 2진수를 16진수로 변환할 때 ibase를 먼저 설정하는 경우는 아래와 같이 좀 복잡해진다.

# 2진수를 16진수로 변환
# ibase 설정을 먼저 하는 경우
echo "ibase=2; obase=10000; 11011" | bc
1B

입력값의 기수를 정하는 ibase가 먼저 2진수로 설정되었기 때문에, obase를 16진수로 설정하려면 16을 2진수로 변환한 10000을 obase 값으로 설정해 주어야 한다. 복잡하다.

 

728x90
Posted by 반달가면