[Delphi] 진법변환 (16->10, 10->2, 2->16. 10->8, 2->8)

2026. 5. 21. 16:22·Programming/Delphi

안녕하세요! 오늘은 코딩이나 자격증 공부를 하다 보면 한 번쯤 우리를 괴롭히는 진법 변환에 대해 알아보려고 합니다. 10진수밖에 모르는 우리와 0, 1밖에 모르는 컴퓨터 사이의 통역사 역할을 해줄 이 기술, 생각보다 간단합니다!

 

1. n진수 → 10진수: “자리수 파워를 믿으세요”

어떤 진수든 10진수로 바꿀 때는 각 자리의 숫자에 해당 진수의 거듭제곱을 곱해서 더하면 됩니다.

  • 핵심: 오른쪽 끝(0번째 자리)부터 시작해서 왼쪽으로 갈수록 지수가 커집니다.
  • 예시: 2진수 $1011_2$을 10진수로 바꾸기

Tip: 모든 수의 0제곱($n^0$)은 1이라는 사실만 기억해도 절반은 성공입니다!

2. 10진수 → n진수: “나머지만 모아라”

10진수를 다른 진수로 바꿀 때는 목표로 하는 진수로 계속 나누면 됩니다.

  1. 10진수를 바꾸려는 진수(2, 8, 16 등)로 나눕니다.
  2. 나머지를 오른쪽에 적어둡니다.
  3. 몫이 0이 될 때까지 반복합니다.
  4. 가장 마지막에 나온 나머지부터 거꾸로 읽어 올라가면 끝!
  • 예시: 10진수 25를 2진수로 바꾸기
    • 25 ÷ 2 = 12 … 나머지 1 (↑ 읽기 시작)
    • 12 ÷ 2 = 6 … 나머지 0
    • 6 ÷ 2 = 3 … 나머지 0
    • 3 ÷ 2 = 1 … 나머지 1
    • 1 ÷ 2 = 0 … 나머지 1
    • 결과: 11001

3. 2진수 ↔ 8진수/16진수: “끼리끼리 묶기”

여기가 가장 꿀팁인 부분입니다! 8은 $2^3$이고, 16은 $2^4$이죠? 그래서 굳이 10진수를 거칠 필요가 없습니다.

  • 2진수 → 8진수: 뒤에서부터 3자리씩 끊어서 계산
  • 2진수 → 16진수: 뒤에서부터 4자리씩 끊어서 계산
진수 (4자리) 16진수 2진수 (4자리) 16진수
1010 A (10) 1101 D (13)
1011 B (11) 1110 E (14)
1100 C (12) 1111 F (15)

 

델파이 진법변환 소스

2진수 : 0, 1 → 수의 개수가 두 개이기에 2진수.. (4진수 : 0, 1, 2, 3 → 수의 개수가 네 개이기에 4진수..)
8진수 : 0, 1, 2, 3, 4, 5, 6, 7 → 수의 개수가 여덟 개이기에 8진수..
10진수 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 → 수의 개수가 열 개 이기에 10진수..
16진수 : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A(10), B(11), C(12), D(13), E(14), F(15) → 수의 개수가 열여섯 개이기에 16진수..

16->10, 10->2, 2->16. 10->8, 2->8

 

// 문자를 10진수로...
function CharToInteger(chr: Char): Integer;
begin
  Result := Ord(chr);
end;

// 16진수를 10진수로...
function HexToInteger(HEX: String): Integer;
begin
  if HEX = '' then begin
    Result := 0;
  end
  else begin
    HEX := '$' + HEX;
    Result := StrToInt(HEX);
  end;
end;

// 10진수를 2진수로...
function DecToBinStr(n: integer): String;
var
  S: string;
  i: integer;
  Negative: boolean;
begin
  if n = 0 then begin
    Result := '0';
    System.Exit;
  end;
  Negative := False;
  if n < 0 then
    Negative := True; // 음수표시
  n := Abs(n);

  for i := 1 to SizeOf(n) * 8 do begin
    if n < 0 then 
 	  S := S + '1' 
    else 
	  S := S + '0';
    n := n shl 1;
  end; 
  Delete(S,1,Pos('1',S) - 1);
  //remove leading zeros 
  if Negative then 
    S := '-' + S;
  Result := S; 
end; 

// 2진수를 16진수로... 
function BinToHex(const Bin: String; const Digits: Integer): String;
var 
  i,l: Integer;
  Res: Extended;
begin
  Res := 0;
  l := Length(Bin);
  for i := l downto 1 do begin 
    if Bin[i] = '1' then 
	  Res := Res + Power(2,l-i);
  end; 
  Result := IntToHex(Trunc(Res), Digits); 
end; 

// 10진수를 8진수로... 
function DecToOct(iValue: LongInt): String;
var 
  iRest: LongInt;
  sOct: String; 
  iFor: Integer; 
begin 
  sOct := '';
  while iValue > 0 do begin
    iRest := iValue mod 8;
    iValue := iValue div 8;
    sOct := IntToStr(iRest) + sOct;
  end;
  Result := sOct;
end;

// 2진수를 8진수로...
function BinToOct(const Bin: String): String;
var
  i,l: Integer;
  Res: Extended;
begin
  // 2진수를 10진수로 변환한다
  Res := 0;
  l := Length(Bin);
  for i := l downto 1 do begin
    if Bin[i] = '1' then
	Res := Res + Power(2,l-i);
  end;
  // 10진수를 8진수로 변환한다
  Result := DecToOct(Trunc(Res));
end;

 

사용법

  • 16진수 -> 10진수
  • 10진수 -> 2진수
  • 10진수 -> 8진수
  • 2진수 -> 8진수
  •  
// 16진수 FF를 10진수로 변환
ShowMessage('(16):FF->(10):'+IntToStr(HexToInteger('FF')));
// 10진수 255를 2진수로 변환
ShowMessage('(10):255->(2):'+DecToBinStr(255));
// 2진수 11111111를 16진수로 변환
ShowMessage('(2):11111111->(16):'+BinToHex('11111111',2));
// 10진수 255를 8진수로 변환
ShowMessage('(10):255->(8):'+DecToOct(255));
// 2진수 11111111를 8진수로 변환
ShowMessage('(2):11111111->(8):'+BinToOct('11111111'));

'Programming > Delphi' 카테고리의 다른 글

DirectShow 기본 Cam 프로그램  (0) 2026.05.31
[Delphi] SAPI 컴포넌트 등록 방법(TTS 구현)  (0) 2026.05.20
[Delphi] DirectShow 강좌  (1) 2026.05.18
[Delphi] ShellContols 컴포넌트 등록법  (0) 2026.05.15
[Delphi] 웹프로그래밍 #4 - 게시판 만들기  (0) 2026.05.13
'Programming/Delphi' 카테고리의 다른 글
  • DirectShow 기본 Cam 프로그램
  • [Delphi] SAPI 컴포넌트 등록 방법(TTS 구현)
  • [Delphi] DirectShow 강좌
  • [Delphi] ShellContols 컴포넌트 등록법
레이조(RayCho)
레이조(RayCho)
개발자 레이조(RayCho)의 블로그입니다. 똑똑하게 배우고 기록하는 공간
  • 레이조(RayCho)
    레이(Ray)의 개발이야기
    레이조(RayCho)
  • 전체
    오늘
    어제
    • 분류 전체보기 (54) N
      • Programming (54) N
        • Python (5)
        • Flutter (4)
        • Delphi (20) N
        • Lazarus (1)
        • C#.NET (6) N
        • ASP.NET (5)
        • Database (5)
        • Game Dev (0)
        • Web (5)
        • ETC (3)
      • Homebrew (0)
  • 블로그 메뉴

    • 홈
    • Introduce
    • 태그
    • 방명록
  • 링크

    • Naver Blog
    • Diary Blog
  • 공지사항

  • 인기 글

  • 태그

    강좌
    기초
    Web
    프로그래밍
    델파이
    문법
    웹프로그래밍
    delphi
    ASP.NET
    SQL
    C#
    JSON
    mssql
    VCL
    Python
    iis
    소스코드
    objectpascal
    개발환경
    Flutter
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
레이조(RayCho)
[Delphi] 진법변환 (16->10, 10->2, 2->16. 10->8, 2->8)
상단으로

티스토리툴바