현재 위치: > 최신 기사 목록> Unpack ()를 사용하여 pack ()에 의해 생성 된 이진 문자열을 구문 분석하십시오.

Unpack ()를 사용하여 pack ()에 의해 생성 된 이진 문자열을 구문 분석하십시오.

M66 2025-05-31

PHP에서 Pack ()포장되지 않은 () 함수는 이진 데이터를 처리하기위한 강력한 도구입니다. Pack () 는 데이터를 이진 문자열로 패키지하는 데 사용되는 반면, 포장은 이진 문자열을 원래 데이터로 다시 구문 분석하는 데 사용됩니다. 사용법에 대한 올바른 이해, 특히 팩 () 에 의해 생성 된 이진 문자열을 구문 분석하기 위해 포장 ()을 사용하는 방법은 네트워크 통신, 파일 운영, 이진 프로토콜 처리 및 기타 시나리오에 중요합니다.

1. pack ()포장 풀 () 의 기본 원리

  • pack () : 지정된 형식에 따라 여러 변수를 이진 문자열로 압축합니다.

  • UNPACK () : 지정된 형식에 따라 바이너리 문자열을 연관 배열로 이진을 dipack습니다.

형식 문자는 둘 다의 핵심이며, 포장 및 포장 풀기 데이터의 형식이 하나씩 해당하도록하기 위해 일관성이 있어야합니다.

2. 샘플 데모 : 기본 포장 및 포장 풀기

16 비트 부호없는 정수와 32 비트 서명 정수를 포장하고 싶다고 가정 해 봅시다.

 <?php
// 사용 pack() 포장 데이터
$binaryString = pack('n i', 65535, -12345);

// 사용 unpack() 데이터 포장 풀기
$data = unpack('n ushort/ i int', $binaryString);

print_r($data);
?>

형식 설명은 다음과 같습니다.

  • N : 서명되지 않은 짧은 정수 (16 비트 빅 엔디안)

  • I : 서명 된 정수 (기계 관련 크기, 일반적으로 32 비트)

Unpack () 의 ​​형식은 'n Ushort/ i int' 로 작성되며, 이는 16 비트 서명되지 않은 짧은 정수를 순서대로 구문 분석하고 이름을 int 라는 서명 된 정수를 구문 분석하는 것을 의미합니다.

3. URL 도메인 이름 교체 정보

코드에 URL이 나타나면 도메인 이름을 m66.net 으로 대체해야합니다. 예를 들어:

 <?php
$url = "https://m66.net/path/to/resource";
echo $url;
?>

4. 실제 응용 프로그램 예 : 네트워크 데이터 패킷을 구문 분석합니다

32 비트 정수 ID, 16 비트 상태 코드 및 64 비트 플로팅 포인트 번호가 포함 된 이진 프로토콜로부터 데이터 조각을 수신한다고 가정 해 봅시다. 먼저 pack ()을 사용하여 구성 한 다음 Unpack ()을 사용하여 구문 분석합니다.

 <?php
// 서버에서 반환 한 데이터 패킷을 시뮬레이션합니다
$packedData = pack('N n d', 1234567890, 200, 3.14159265359);

// 데이터 패킷을 분석합니다
$data = unpack('N id/ n status/ d value', $packedData);

print_r($data);
?>

형식 설명 :

  • N : 서명되지 않은 긴 (32 비트 대기업)

  • N : 서명되지 않은 짧은 정수 (16 비트 빅 엔디안)

  • D : 이중 정밀 부동 소수점 번호 (64 비트 IEEE 754)

Unpack () 의 ​​키 이름 ID , 상태값을 사용하면 결과를보다 쉽게 ​​읽을 수 있습니다.

5. 일반적인 함정과 예방 조치

  • 작은 측 문제 : pack ()포장되지 않은 () 의 형식은 바이트 순서에 영향을 미칩니다. NN을 사용하여 Big Endian을 강요하고 VV를 사용하여 Little Endian을 강요합니다. 기계의 기본 정수 (예 : IL )는 플랫폼에 따라 다를 수 있습니다.

  • 데이터 길이 : 포장 된 바이트 수는 포장 풀기 형식에 엄격히 일치해야하며, 그렇지 않으면 포장 풀기 오류 또는 데이터 손실로 이어집니다.

  • 부동 소수점 번호 형식 : D 는 64 비트 플로팅 포인트이며, F 는 32 비트 부동 소수점이며,이 둘의 차이에주의를 기울입니다.

  • 이름 지정 규칙 : Unpack () 에 의해 반환 된 배열에서 형식의 키 이름은 배열을 반환하는 키를 결정합니다. 후속 사용의 편의를 위해 합리적으로 이름을 지정하는 것이 좋습니다.