> 백엔드 개발 > PHP7 > 본문

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

藏色散人
풀어 주다: 2023-02-18 09:02:01
앞으로
1851명이 탐색했습니다.

이 글은 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿