현재 위치: > 최신 기사 목록> 이진 데이터의 직렬화를 구현하려면 팩 ()을 사용하십시오

이진 데이터의 직렬화를 구현하려면 팩 ()을 사용하십시오

M66 2025-06-05

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)

예제 분석

1. 포장 문자열과 정수

 <?php
// 하나의 길이를 포장하십시오4문자열과 하나32비트가 부호되지 않은 큰 엔디 어 정수
$packed = pack('a4N', 'test', 123456789);
echo bin2hex($packed);
?>

여기서 'a4'는 길이 4의 문자열을 포장하는 것을 의미합니다. 'n'은 32 비트 서명되지 않은 대기업 정수를 포장하는 것을 의미합니다. Bin2Hex ()는 이진 함량을 16 진수로 변환하여 쉽게 볼 수 있습니다.

2. Pack ()을 사용하여 네트워크 프로토콜 패키지를 구축하십시오

명령 유형 (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 바이트 빅 엔디안 정수). 데이터 본문은 그대로 그대로 접합됩니다.

3. Pack () 및 Unpack ()를 사용하여 서로 변환하는 예

 <?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 () 는 이진 데이터를 조작하기위한 강력한 도구이며, 특히 네트워크 프로그래밍 및 기본 데이터 처리에 적합합니다. 형식 코드를 사용하는 데 숙련되면 바이트 배열 및 데이터 유형을 정확하게 제어 할 수 있습니다.