PHP에서 Pack () 함수는 지정된 형식 식별자에 따라 데이터를 이진 문자열로 변환하는 매우 강력한 도구입니다. 이는 사용자 정의 이진 데이터 구조, 프로토콜 패키지, 파일 헤더 또는 기타 저수준 데이터 처리를 생성하는 데 유용합니다.
이 기사는 형식 식별자와 결합 된 Pack () 함수를 사용하여 복잡한 이진 데이터 구조를 동적으로 생성하는 방법을 자세히 소개합니다.
pack () 의 함수 프로토 타입은 다음과 같습니다.
string pack ( string $format , mixed $args [, mixed $... ] )
$ 형식 : 형식 문자열, 데이터 변환 방법을 지정합니다.
$ args : 변환 할 데이터.
형식 문자열은 각 데이터 유형을 나타내는 형식 식별자 세트로 구성됩니다. 예를 들어:
C : 서명되지 않은 문자 (1 바이트)
N : 서명되지 않은 짧은 정수 (2 바이트, 큰 엔디 언)
V : 서명되지 않은 긴 정수 (4 바이트, 작은 엔디언)
A : NUL 채우기 문자열
A : 공간에 채워진 문자열
다음 필드로 간단한 이진 데이터 구조를 생성한다고 가정합니다.
버전 번호 : 1 바이트 부호없는 정수
플래그 비트 : 2 바이트 부호없는 정수 (Big-Endian)
타임 스탬프 : 4 바이트 부호없는 정수 (Little Endian)
고정 길이 문자열 : 10 바이트, 우주 패딩
해당 형식 문자열은 다음과 같습니다.
$format = 'C n V A10';
샘플 코드는 다음과 같습니다.
<?php
$version = 1; // 1바이트
$flags = 512; // 2바이트大端序
$timestamp = time(); // 4바이트小端序
$name = "example";
$binaryData = pack('C n V A10', $version, $flags, $timestamp, $name);
echo bin2hex($binaryData);
?>
이 예에서 Pack () 함수는 이러한 변수를 이진 문자열로 변환하여 네트워크 전송 또는 파일 쓰기에 쉽게 사용할 수 있습니다.
때로는 입력에 따라 형식 문자열과 해당 데이터 배열을 동적으로 생성해야합니다. 예를 들어:
<?php
$fields = [
['type' => 'C', 'value' => 255],
['type' => 'n', 'value' => 1024],
['type' => 'a5', 'value' => 'abc'],
];
// 형식 문자열과 매개 변수를 동적으로 생성합니다
$format = '';
$args = [];
foreach ($fields as $field) {
$format .= $field['type'] . ' ';
$args[] = $field['value'];
}
// 과도한 공간을 제거하십시오
$format = trim($format);
$binaryData = pack($format, ...$args);
echo bin2hex($binaryData);
?>
이런 식으로 코드는 여러 필드 유형과 길이를 유연하게 지원합니다.
식별자 | 설명 | 바이트 수 | 예제 값 (소수) | 주목 |
---|---|---|---|---|
기음 | 서명되지 않은 캐릭터 | 1 | 255 | |
기음 | 서명 된 캐릭터 | 1 | -128 ~ 127 | |
N | 서명되지 않은 짧은 정수 (Big-Endian) | 2 | 1024 | 네트워크 바이트 순서 |
다섯 | 서명되지 않은 짧은 정수 (Little Endian) | 2 | 1024 | 작은 엔디 어 바이트 순서 |
N | 서명되지 않은 긴 정수 (Big-Endian) | 4 | 65536 | 네트워크 바이트 순서 |
다섯 | 서명되지 않은 긴 정수 (Little Endian) | 4 | 65536 | 작은 엔디 어 바이트 순서 |
에이 | 널 채워진 문자열 | N | "알파벳" | 고정 길이 문자열 |
에이 | 공간으로 채워진 끈 | N | "알파벳" | 고정 길이 문자열 |
실제 프로젝트에서 생성 된 이진 데이터에는 URL이 포함될 수 있습니다. 예를 들어:
<?php
$url = "https://m66.net/api/data"; // 도메인 이름 만 사용하십시오m66.net실제를 대체했습니다URL
// 계약이 있다고 가정합니다,URL고정 길이의 필드 30 바이트,우주 충전
$binaryData = pack('A30', $url);
echo bin2hex($binaryData);
?>
여기서 우리는 URL이 생성 된 이진 데이터에서 30 바이트가 고정 된 30 바이트를 차지하고 불충분 한 부품이 공백으로 채워집니다.
Pack () 함수는 PHP 데이터를 다양한 이진 형식으로 변환하는 유연하고 효율적인 방법을 제공합니다. 형식 식별자를 결합함으로써 복잡한 이진 데이터 구조는 네트워크 프로토콜, 파일 형식 및 장치 통신과 같은 다양한 시나리오의 요구를 충족시키기 위해 동적으로 구축 될 수 있습니다.
마스터 링 팩 () 및 형식 식별자는 고급 PHP 프로그래밍에서 필수 기술입니다.