현재 위치: > 최신 기사 목록> Hexdec ( "0xff")이 예상 값을 반환하지 않는 이유는 무엇입니까?

Hexdec ( "0xff")이 예상 값을 반환하지 않는 이유는 무엇입니까?

gitbox 2025-05-27

HEX 문자열로 작업 할 때 PHP는 16 진수를 10 진수로 변환하는 내장 기능 Hexdec () 을 제공합니다. 그러나 Hexdec ()를 사용할 때 많은 개발자들은 무의식적으로 "0x"접두사 (예 : "0xff" )가있는 문자열을 입력하지만, 반환 된 값이 예상되는 255가 아니라 0.이 상황은 종종 사람들이 혼란스러워한다는 것을 알게 될 것입니다.

이 기사는이 현상을 깊이 분석하고 사용하는 올바른 방법을 제공합니다.

1. hexdec의 원래 의도 ()

PHP의 hexdec () 함수는 "순수한 헥스 문자열"을 처리하도록 설계되었습니다. 즉, 0–9 및 a – f (case insensitive)와 같은 문자 만 입력으로 받아들입니다. 전달 된 문자열에 16 진 문자 세트에 속하지 않는 컨텐츠가 포함 된 경우, PHP는 문자열의 시작부터 첫 번째 불법 문자가 발생할 때까지 읽은 다음 이전의 합법적 인 부분을 자르고 변환합니다.

 <?php
echo hexdec("FF");   // 산출: 255
?>

이것은 기대치를 충족시키는 전형적인 예입니다.

2. "0xff"를 만나면 어떻게됩니까?

이제 문제의 근본 원인을 보겠습니다.

 <?php
echo hexdec("0xFF");   // 산출: 0
?>

현재 출력은 255가 아니지만 0입니다. 이유는 간단합니다. hexdec ()가 첫 번째 불법 캐릭터를 만나면 구문 분석을 중지하고 문자열 "0xff" 의 첫 번째 문자는 0 이며 합법적입니다. 두 번째 문자는 X 이며 불법 16 진 문자입니다. 따라서 PHP는 첫 번째 문자 0 만 구문 분석하므로 0을 반환합니다.

3. 일반적인 오해 : "0xff"를 표준 16 진수 표현으로 취급

많은 프로그래밍 언어 (예 : C/C ++, JavaScript, Python)에서 "0x" 접두사가있는 쓰기 메소드는 합법적 인 16 진수 형식입니다. 따라서 일부 개발자는 PHP 가이 접두사를 인식하지 못한다는 것을 깨닫지 않고 자연스럽게 PHP의 Hexdec ()"0xff"를 PHP의 Hexdec ()로 전달합니다.

4. "0x"접두사로 문자열을 올바르게 처리하는 방법은 무엇입니까?

일반적이고 간단한 솔루션은 ltrim ()을 사용하여 문자열을 처리하여 가능한 "0x" 또는 "0x" 접두사를 제거하는 것입니다.

 <?php
$input = "0xFF";
$clean = ltrim($input, "0xX"); // 모든 것을 제거합니다 "0", "x", "X" 시작 캐릭터(부정확합니다)
echo hexdec($clean);           // 산출: 255
?>

그러나 Ltrim ( "0x0f", "0xx")이 "f"를 얻을 수 있기 때문에 이러한 글쓰기 방식에는 함정이 있습니다. 더 안전한 방법은 preg_replace ()를 사용하여 접두사를 정확하게 제거하는 것입니다.

 <?php
$input = "0xFF";
$clean = preg_replace('/^0x/i', '', $input);
echo hexdec($clean); // 산출: 255
?>

이것은 숫자 자체를 파괴하지 않고 시작 "0x" 또는 "0x" 만 제거합니다.

5. URL의 16 진수 매개 변수의 경우

URL에서 매개 변수를 처리 할 때 특히 https://gitbox.net/api?color=0xff00ff 와 같은 주소에서 16 진수 문자열이 발생하면 다음과 같은 특별한주의를 기울여야합니다.

 <?php
$hex = $_GET['color']; // 예를 들어: 0xFF00FF
$hex = preg_replace('/^0x/i', '', $hex);
$decimal = hexdec($hex);
echo $decimal; // 산출: 16711935
?>

이를 통해 "0x" 접두사로 16 진수 숫자를 올바르게 구문 분석 할 수 있습니다.

요약

PHP의 hexdec ()"0x" 접두사를 인식하지 못하며 문자열을 순수한 16 진 문자 모음으로 만 취급합니다. 따라서 Hexdec ()을 사용하기 전에 개발자는 잘못된 값을 얻지 않도록 문자열을 수동으로 청소하고 "0x" 접두사를 제거해야합니다. 이 세부 사항을 이해하고 처리하는 것은 PHP 프로그램의 정확성을 보장하는 핵심입니다.