php에서 pack () 함수는 지정된 형식의 이진 문자열로 데이터를 패키지하는 데 사용됩니다. 이것은 네트워크 전송, 파일 쓰기 및 C 또는 기타 저수준 언어와의 상호 작용을 다룰 때 유용합니다. 이 기사는 Pack () 함수의 사용법을 자세히 설명하고 예제를 결합하여 데이터를 이진 형식으로 패키지하는 방법을 설명합니다.
pack () 의 기본 구문은 다음과 같습니다.
string pack(string $format, mixed $values, mixed ...$values)
$ 형식 : 하나 이상의 형식 코드로 구성된 데이터 형식을 지정합니다.
$ 값 : 포장 할 값은 여러 매개 변수 일 수 있습니다.
리턴 값은 지정된 형식으로 포장 된 이진 문자열입니다.
형식 코드 | 설명하다 | 예 |
---|---|---|
에이 | NUL 캐릭터가 채워진 문자열 | 팩 ( 'a4', 'abc') |
에이 | 공간으로 채워진 끈 | 팩 ( 'a4', 'abc') |
기음 | 서명 된 캐릭터 (1 바이트) | 팩 ( 'C', 65) |
기음 | 서명되지 않은 문자 (1 바이트) | 팩 ( 'C', 65) |
에스 | 서명 된 짧은 정수 (2 바이트) | 팩 ( 'S', 1234) |
에스 | 서명되지 않은 짧은 정수 (2 바이트) | 팩 ( 'S', 1234) |
나 | 서명 된 정수 (기계 단어 길이) | 팩 ( 'i', 123456) |
나 | 서명되지 않은 정수 (기계 단어 길이) | 팩 ( 'i', 123456) |
엘 | 긴 정수 (4 바이트) 서명 | 팩 ( 'l', 123456) |
엘 | 서명되지 않은 긴 정수 (4 바이트) | 팩 ( 'l', 123456) |
에프 | 부동 소수점 번호 (4 바이트) | 팩 ( 'f', 3.14) |
디 | 이중 정밀 플로팅 포인트 번호 (8 바이트) | 팩 ( 'D', 3.14) |
N | 서명되지 않은 짧은 정수 (16 비트 빅 엔디안 엔디언) | 팩 ( 'n', 1234) |
N | 서명되지 않은 긴 정수 (32 비트 빅 엔디안 엔디언) | 팩 ( 'n', 1234) |
<?php
// 하나의 길이를 포장하십시오4문자열과 하나32비트가 부호되지 않은 큰 엔디 어 정수
$packed = pack('a4N', 'test', 123456789);
echo bin2hex($packed);
?>
여기서 'a4'는 길이 4의 문자열을 포장하는 것을 의미합니다. 'n'은 32 비트 서명되지 않은 대기업 정수를 포장하는 것을 의미합니다. Bin2Hex ()는 이진 함량을 16 진수로 변환하여 쉽게 볼 수 있습니다.
명령 유형 (1 바이트) 및 데이터 길이 (4 바이트 Big Endian)를 포함한 간단한 네트워크 패킷을 구성하고 데이터 본문을 구성해야한다고 가정합니다.
<?php
$command = 1; // 명령 유형,1바이트
$data = "Hello, m66.net!"; // 데이터 본문
$length = strlen($data); // 데이터 길이
// 打包명령 유형和데이터 길이
$header = pack('CN', $command, $length);
// 완전한 데이터 패킷을 접합합니다
$packet = $header . $data;
// 출력 패키지의 16 진수 표현
echo bin2hex($packet);
?>
위의 코드에서 'C' 패키지 명령 유형 (1 바이트 부호없는 정수) 및 'N' 패키지 데이터 길이 (4 바이트 빅 엔디안 정수). 데이터 본문은 그대로 그대로 접합됩니다.
<?php
$number = 65535;
$packed = pack('n', $number); // 按大端바이트序打包为16서명되지 않은 정수
echo 'Packed data: ' . bin2hex($packed) . PHP_EOL;
$unpacked = unpack('nvalue', $packed); // 포장 풀기
echo 'Unpacked value: ' . $unpacked['value'] . PHP_EOL;
?>
Pack () 는 이진 데이터를 조작하기위한 강력한 도구이며, 특히 네트워크 프로그래밍 및 기본 데이터 처리에 적합합니다. 형식 코드를 사용하는 데 숙련되면 바이트 배열 및 데이터 유형을 정확하게 제어 할 수 있습니다.