리눅스를 비롯한 다양한 유닉스 계열 운영체제, 그리고 GNU 유틸리티가 설치된 거의 모든 환경에는 기본 계산기 언어인 bc가 포함되어 있습니다. bc의 문법은 C 프로그래밍 언어와 매우 유사하며, 무엇보다 명령줄에서 곧바로 16진수 계산기로 활용할 수 있습니다. 덕분에 스마트폰에 별도의 16진수·8진수 계산 앱을 설치해 둘 필요가 없습니다.
개발자는 물론 과제를 수행하는 학생들에게도 반가운 소식입니다. 다만 터미널을 먼저 열어야 한다는 점만 기억하세요. Ctrl + Alt + T를 동시에 누르거나 우분투 Unity Dash에서 "터미널"을 검색하면 됩니다. 시스템 도구(System Tools) 메뉴의 Whisker 또는 응용 프로그램 메뉴에서 실행할 수도 있습니다. macOS 사용자라면 유틸리티 폴더에서 터미널을 열거나, Dock에 고정해 두었다면 클릭 한 번으로 실행할 수 있습니다. bc는 리눅스뿐 아니라 요즘 대부분의 유닉스 계열 운영체제에서 기본으로 제공됩니다.
방법 1: bc로 10진수 ↔ 16진수 변환하기
10진수 127을 16진수로 변환하려면 아래 명령어를 입력하고 Enter를 누릅니다.
echo 'obase=16;127' | bc
결과는 7F입니다. 숫자는 물론 원하는 정수로 자유롭게 바꿔 입력할 수 있습니다. 반대로 16진수를 다시 10진수로 되돌리려면 echo 'ibase=16;obase=A;7F' | bc처럼 입력하면 됩니다. 이렇게 간단해서 언제든 유효한 16진수와 함께 사용할 수 있고, 유닉스 스타일 명령어이기 때문에 셸 스크립트에 넣어 자동화하는 것도 가능합니다. 진법 변환이 필요한 순간마다 명령줄에서 즉석으로 처리할 수 있다는 점이 가장 큰 장점입니다.
방법 2: 2진수 ↔ 16진수 변환하기
명령 프롬프트에 echo 'obase=16;ibase=2;111010001' | bc라고 입력하면 2진수를 16진수로 변환할 수 있습니다. Enter를 누르면 1D1이라는 결과가 반환됩니다. 물론 그 자리에 변환하려는 임의의 2진수를 넣으면 됩니다. 역방향 변환 역시 동일한 원리로 가능합니다. echo 'obase=2;ibase=16;1D1' | bc를 입력하고 Enter를 누르면 처음의 2진수 값이 그대로 되돌아옵니다. 1D1 대신 다른 유효한 16진수를 넣어도 똑같이 동작합니다.
이 방법을 자주 사용할 계획이라면 두 가지를 꼭 기억해 두세요.
첫째, 16진수에 포함된 알파벳 문자(A~F)는 반드시 대문자로 입력해야 합니다. bc는 소문자를 대수 변수로 해석하기 때문입니다.
둘째, 이 모든 명령어는 일반 사용자 권한으로 실행할 수 있으며, 최신 리눅스나 유닉스 환경에서 root 권한은 필요하지 않습니다.
방법 3: bc를 완전한 16진수 계산기로 활용하기
bc는 단순한 진법 변환기를 넘어 16진수 산술 연산까지 처리할 수 있습니다. 일반 사용자에게는 잘 쓰이지 않지만, 프로그래머라면 서로 다른 두 메모리 주소의 차이를 계산해야 할 때가 종종 있습니다. 중·고등학교와 대학의 컴퓨터과학 과제에서도 단골로 등장하는 문제 유형이기도 합니다.
예를 들어 16진수 EE65522D에서 C3EFAF86을 빼고 싶다면 echo 'ibase=16;EE65522D-C3EFAF86' | bc를 입력하고 Enter를 누릅니다. 결과를 16진수로 받고 싶다면 echo 'obase=16;ibase=16;EE65522D-C3EFAF86' | bc처럼 obase까지 함께 지정해 주면 됩니다.
다른 산술 연산도 모두 지원됩니다. 예컨대 echo 'obase=16;ibase=16;EE65522D*C3EFAF86' | bc는 두 값을 곱하며, 덧셈에는 + 연산자를 사용하면 됩니다. 다만 나눗셈(/)은 나머지를 반환하지 않으므로, 나머지가 필요하다면 % 연산자(모듈로)를 사용해야 합니다.
예를 들어 echo 'obase=16;ibase=16;EE65522D%C3EFAF86' | bc를 실행하면 2A75A2A7이 반환됩니다. 이는 해당 연산의 몫이 1이고 나머지가 2A75A2A7이기 때문입니다. 몫과 나머지를 모두 확인하려면 / 연산자를 먼저 실행한 뒤 % 연산자를 차례로 실행하면 됩니다.
마무리
별도의 프로그램 설치 없이 터미널에 이미 들어 있는 bc 명령어만으로 진법 변환과 16진수 연산을 모두 처리할 수 있습니다. 위 명령어들을 몇 번 직접 실행해 보면 금방 감이 잡히니, 업무나 과제에서 16진수를 다룰 일이 생긴다면 적극적으로 활용해 보시길 권합니다.
저자 소개

Kevin Arrows
Kevin Arrows는 10년 이상의 업계 경력을 지닌 베테랑 기술 전문가입니다. Microsoft Certified Technology Specialist(MCTS) 자격증을 보유하고 있으며, 최신 기술 동향을 꾸준히 학습하는 데 남다른 열정을 가지고 있습니다. 소프트웨어 개발, 사이버 보안, 클라우드 컴퓨팅 등 폭넓은 IT 분야의 글을 집필해 왔으며, 복잡한 기술 개념을 명확하고 간결하게 풀어내는 필력으로 동료들에게 폭넓은 인정을 받고 있습니다.