Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP base_convert() 함수 완벽 가이드 – 진법 변환 문법과 실전 예제

PHP base_convert() 함수란?

base_convert() 함수는 숫자를 한 진법(base)에서 다른 진법으로 변환해 주는 매우 유용한 유틸리티입니다. 이 함수의 진법은 2진수, 8진수, 10진수, 16진수처럼 흔히 쓰이는 진법에 국한되지 않고, 2부터 36까지의 임의의 진법을 자유롭게 사용할 수 있다는 점이 특징입니다.

함수의 첫 번째 인자는 영숫자(alphanumeric) 문자를 포함하는 문자열입니다. 진법이 9보다 클 때는 알파벳 a~z가 숫자 역할을 대신합니다. 즉, 10은 'a', 11은 'b'로 표현되며, 이런 식으로 35는 'z'에 해당합니다.

예를 들어 base_convert('1001', 2, 10)은 '1001'을 2진수에서 10진수로 변환하는 함수 호출이며, 그 결과는 9입니다.

문법(Syntax)

base_convert ( string $number , int $frombase , int $tobase ) : string

매개변수(Parameters)

번호매개변수 및 설명
1number
변환할 숫자가 담겨 있는 문자열입니다.
2frombase
number가 현재 표현된 진법입니다.
3tobase
number를 변환하고자 하는 대상 진법입니다.

반환 값(Return Value)

PHP의 base_convert() 함수는 변환이 완료된 number를 나타내는 문자열(string)을 반환합니다.

지원 PHP 버전

이 함수는 PHP 4.x, PHP 5.x, PHP 7.x 모든 버전에서 사용할 수 있습니다.

예제 1: 2진수를 10진수로 변환

다음 예제는 '1001'을 2진수 체계에서 10진수 체계로 변환합니다.

<?php
    $arg='1001';
    $frombase = 2;
    $tobase = 10;
    $val=base_convert($arg,$frombase, $tobase);
    echo "base_convert(" . $arg . " from base " . $frombase . "to " . $tobase . ") = " . $val;
?>

실행 결과

base_convert(1001 from base 2 to 10) = 9

예제 2: 5진수를 16진수로 변환

다음 예제는 5진법으로 표현된 '12340'을 16진법으로 변환합니다.

<?php
    $arg='12340';
    $frombase = 5;
    $tobase = 16;
    $val=base_convert($arg,$frombase, $tobase);
    echo "base_convert(" . $arg . " from base " . $frombase . "to " . $tobase . ") = " . $val;
?>

실행 결과

base_convert(12340 from base 5 to 16) = 3ca

예제 3: 알파벳·숫자 외 문자는 무시됨

알파벳(a-z)이나 숫자(0-9)에 해당하지 않는 문자는 변환 과정에서 무시됩니다. 아래 예제에서 숫자 문자열에 포함된 '+' 기호는 무시되고 나머지 숫자만 변환됩니다.

<?php
    $arg='12+340';
    $frombase = 10;
    $tobase = 16;
    $val=base_convert($arg,$frombase, $tobase);
    echo "base_convert(" . $arg . " from base " . $frombase . "to " . $tobase . ") = " . $val;
?>

실행 결과

base_convert(12+340 from base 10 to 16) = 3034

예제 4: 25진수를 16진수로 변환

"CANDLE"은 25진법으로 표현된 하나의 숫자입니다. 다음 예제는 이 값을 16진수 체계로 변환합니다.

<?php
    $arg='CANDLE';
    $frombase = 25;
    $tobase = 16;
    $val=base_convert($arg,$frombase, $tobase);
    echo "base_convert(" . $arg . " from base " . $frombase . " to " . $tobase . ") = " . $val;
?>

실행 결과

base_convert(CANDLE from base 25 to 16) = 73d5c1d

참고 사항

base_convert() 함수는 내부적으로 부동소수점 연산을 사용하기 때문에, 매우 큰 숫자를 다룰 때는 정밀도(precision) 손실이 발생할 수 있습니다. 따라서 긴 자릿수의 큰 수를 정확하게 변환해야 하는 경우에는 BCMath 확장(예: bcpow(), bcadd()) 등을 활용한 별도의 구현을 고려하는 것이 좋습니다.