PHP 개발에서는 때때로 정수를 데이터 포장, 네트워크 전송 또는 파일 쓰기를 위해 이진 문자열 형식으로 변환해야합니다. PHP의 내장 팩 () 기능은이 작업을 수행하는 강력한 도구입니다. 이 기사는 Pack () 함수의 기본 사용법을 소개하고 정수를 이진 문자열로 변환하는 방법에 중점을두고 실제 응용 시나리오를 설명하기위한 예를 제시합니다.
Pack () 함수는 데이터를 이진 문자열로 패키지하는 데 사용되며 구문은 다음과 같습니다.
string pack(string $format, mixed ...$values)
$ 형식 : 형식 문자열, 후속 매개 변수가 패키지되는 방법을 나타냅니다.
$ 값 : 패키지 할 데이터.
Pack ()는 다양한 형식의 문자를 지원 하며이 기사는 정수를 포장하는 데 사용되는 여러 키워드에 중점을 둡니다.
정수를 다룰 때 다음은 몇 가지 일반적인 형식 문자입니다.
C : 서명되지 않은 문자 (1 바이트, 범위 0–255)
N : 서명되지 않은 짧은 정수 (2 바이트, 네트워크 엔지니어)
V : 서명되지 않은 짧은 정수 (2 바이트, 호스트 바이트 순서)
N : 서명되지 않은 긴 정수 (4 바이트, 네트워크 엔지니어, 큰 엔지니어)
V : 서명되지 않은 긴 정수 (4 바이트, 호스트 엔디언, 작은 엔디언)
J : 서명되지 않은 64 비트 정수 (PHP 5.6+ 지원)
예를 들어, 정수 1234를 2 바이트 네트워크 엔지니네스 바이너리 스트링으로 변환합니다.
$binary = pack("n", 1234);
4294967295 (즉, 32 비트 부호없는 정수의 최대 값)를 네트워크 바이트 주문으로 변환하려고합니다.
$int = 4294967295;
$binary = pack("N", $int);
echo bin2hex($binary); // 산출:ffffffff
사용자 ID (4 바이트), 레벨 (1 바이트) 및 상태 (1 바이트)가 포함 된 이진 데이터 파일을 구성한다고 가정합니다.
$userId = 1001;
$level = 5;
$status = 1;
$data = pack("NCC", $userId, $level, $status);
file_put_contents("user_data.bin", $data);
생성 된 파일에는 정확한 7 바이트 이진 컨텐츠가 포함되어 있으며 임베디드 시스템 또는 크로스 플랫폼 데이터 교환에 이상적입니다.
예를 들어, 게임 서버 통신 프로토콜을 개발하는 경우 클라이언트는 다음 구조와 함께 데이터 패킷을 보내야합니다.
Baotou (2 바이트, 0xabcd 에 고정)
데이터 길이 (2 바이트)
사용자 ID (4 바이트)
토큰 문자열 (가변 길이)
다음과 같이 구성 할 수 있습니다.
$header = 0xABCD;
$userId = 12345;
$token = "abc123token";
$length = 4 + strlen($token);
$packet = pack("nnN", $header, $length, $userId) . $token;
// 서버 주소로 보내십시오,예를 들어:http://m66.net/api/receive_packet
서버를 수신 한 후에는 ()를 포장하여 데이터를 복원 할 수 있습니다.
Endian 문제 : 플랫폼이나 네트워크에서 통신 할 때 N (Big Endian) 또는 V (Little Endian) 형식을 사용하여 일관성을 보장하십시오.
유형 범위 제한 : 정수 값이 지정된 형식 문자의 허용 범위 내에 있는지 확인하십시오. 그렇지 않으면 오버플로 또는 잘림이 발생할 수 있습니다.
Unpack () : pack () 및 unpack () 와 함께 사용하여 쌍으로 사용되며 인코딩 및 디코딩에 편리합니다.
PACK () 함수를 통해 PHP 프로그래머는 정수를 이진 문자열로 쉽게 변환하여 효율적인 데이터 포장을 달성 할 수 있습니다. 이는 기본 프로토콜을 처리하거나 파일 형식을 생성하거나 비 -PHP 시스템과 통신 할 때 특히 중요합니다. 형식 문자 사용 능력은 PHP의 기본 처리에 능숙 해지는 핵심 단계입니다.