>백엔드 개발 >PHP7 >PHP7의 16진수 문자열 처리에 관해

PHP7의 16진수 문자열 처리에 관해

藏色散人
藏色散人앞으로
2021-11-19 17:07:211907검색

이 글은 PHP7튜토리얼 칼럼에서 php7의 "0xFFFFFFFF"와 0xFFFFFFFF의 문제점을 소개하기 위해 작성되었습니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

구체적인 질문:

$t1 = 0x3FFFFFFF & (1 * (0xd5b42e11));
$t2 = 0x3FFFFFFF & (1 * ("0xd5b42e11"));
var_dump($t1,$t2);

php7(포함되지 않음) 및 다음 플랫폼에서 위 코드의 값은 다음과 같습니다.

int(364129809)
int(364129809)

그리고 php7의 값은 다음과 같습니다.

int(364129809)
int(0)

php7 환경에서 0x를 어떻게 처리해야 합니까? . $str을 위의 값과 동일하게 만드는 것은 어떻습니까?

해결책:

PHP7부터 16진수를 포함하는 문자열은 더 이상 숫자로 간주되지 않습니다.

문자열에 16진수가 포함되어 있는지 확인해야 하는 경우 공식 권장 코드는

<?php
$str = "0xffff";
$int = filter_var($str, FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX);
if (false === $int) {
    throw new Exception("Invalid integer!");
}
var_dump($int); // int(65535)
?>

입니다. 위의 질문은 변경되어야 합니다.

$t1 = 0x3FFFFFFF & (1 * (0xd5b42e11));
$t2 = 0x3FFFFFFF & (1 * (filter_var("0xd5b42e11", FILTER_VALIDATE_INT, FILTER_FLAG_ALLOW_HEX)));
var_dump($t1,$t2);
에게

위 내용은 PHP7의 16진수 문자열 처리에 관해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 segmentfault.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제