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

 

델파이 진법변환 소스

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

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진수..

---- 소스코드

// 문자를 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진수 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'));

---- 소스코드 끝

댓글

이 블로그의 인기 게시물

2025년 7월 다이어리

1. 대학교 축제 전시 프로젝트