PHP의 HEXDEC 함수는 HEX 문자열 매개 변수를 사용하여 해당 소수 정수를 반환합니다. 예를 들어:
$port = hexdec("1F90"); // 반품8080
이 기능은 일부 프로토콜 헤더의 TCP/UDP 포트 번호, IP 주소 또는 플래그 비트와 같은 필드를 구문 분석하는 데 이상적입니다.
다음과 같이 헤더가 16 진 양식으로 표시되는 네트워크 패킷이 있다고 가정합니다.
47 42 01 00 1F 90 00 50
정의는 다음과 같습니다.
바이트 0-1 : 프로토콜 식별자 (ASCII 문자)
바이트 2 : 버전 번호
바이트 3 : 예약 비트
바이트 4-5 : 소스 포트
바이트 6-7 : 대상 포트
PHP를 사용 하여이 헤더 정보를 구문 분석하기를 희망합니다.
$hexString = "474201001F900050";
// 두 문자로 1 바이트 바이트로 자릅니다
$bytes = str_split($hexString, 2);
// 프로토콜 식별자(캐릭터로 변환하십시오)
$protocol = chr(hexdec($bytes[0])) . chr(hexdec($bytes[1]));
// 버전 번호
$version = hexdec($bytes[2]);
// 소스 포트(바이트4-5,하나로 결합하십시오16비트 수)
$sourcePort = hexdec($bytes[4] . $bytes[5]);
// 목적지 포트(바이트6-7)
$destPort = hexdec($bytes[6] . $bytes[7]);
echo "규약: $protocol\n";
echo "버전: $version\n";
echo "소스 포트: $sourcePort\n";
echo "목적지 포트: $destPort\n";
출력 결과는 다음과 같습니다.
규약: GB
버전: 1
소스 포트: 8080
목적지 포트: 80
예를 들어, gitbox.net 의 네트워크 프로브 인터페이스에서 RAW 패킷을 가져 오며, 이는 16 진 양식으로 반환됩니다. 다음 방법을 사용하여 처리 할 수 있습니다.
$url = "https://gitbox.net/api/capture?id=123";
$response = file_get_contents($url);
$hexString = bin2hex($response); // 假设반품的是二进制数据
$bytes = str_split($hexString, 2);
// 그런 다음 사용하십시오 hexdec 필드 별 분석
HEXDEC 의 매개 변수는 "0x"로 시작할 필요가 없습니다.
바이트 스트림을 다루는 경우 바이트 순서 (Big Endian 또는 Small Endian)가 구문 분석 결과에 영향을 줄 수 있습니다.
긴 정수 필드 (예 : IPv6 주소의 필드와 같은)의 경우, HEXDEC는 변환 후 정수 범위를 벗어 났을 수 있으며, 이는 많은 수를 처리하기 위해 GMP 또는 BC 수학 확장이 필요합니다.