기타 unpack

(PHP 4, PHP 5, PHP 7, PHP 8)

unpack — 바이너리 문자열에서 데이터 압축 풀기


설명

unpack(string $format, string $string, int $offset = 0): array|false

주어진 format에 따라 이진 문자열에서 배열로 압축을 풉니다.

압축을 푼 데이터는 연관 배열에 저장됩니다. 이를 수행하려면 다른 형식 코드의 이름을 지정하고 슬래시 /로 구분해야 합니다. repeater 인수가 있는 경우 각 배열 키에는 지정된 이름 뒤에 시퀀스 번호가 있습니다.

Perl과 일치하도록 이 함수를 변경했습니다.

  • "a" 코드는 이제 후행 NULL 바이트를 유지합니다.
  • "A" 코드는 이제 모든 후행 ASCII 공백(공백, 탭, 줄 바꿈, 캐리지 리턴 및 NULL 바이트)을 제거합니다.
  • "Z" 코드는 NULL로 채워진 문자열에 추가되었으며 후행 NULL 바이트를 제거합니다.

매개변수

format
형식 코드에 대한 설명은 pack()을 참조하십시오.
string
압축된 데이터입니다.
offset
압축 풀기를 시작할 오프셋입니다.

반환 값

이진 문자열의 압축이 풀린 요소를 포함하는 연관 배열을 반환하거나 실패하면 false를 반환합니다.


변경 로그

버전 설명
7.2.0 float 및 double 유형은 Big Endian과 Little Endian을 모두 지원합니다.
7.1.0 선택적 offset이 추가되었습니다.

Examples

예제 #1 unpack() 예제

                  
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("cchars/nint", $binarydata);
print_r($array);
?>
                  
                

위의 예는 다음을 출력합니다.

Array
(
    [chars] => 4
    [int] => 160
)
                

예제 #2 리피터가 있는 unpack() 예제

                  
<?php
$binarydata = "\x04\x00\xa0\x00";
$array = unpack("c2chars/nint", $binarydata);
print_r($array);
?>
                  
                

위의 예는 다음을 출력합니다.

Array
(
    [chars1] => 4
    [chars2] => 0
    [int] => 40960
)
                

메모

주의 PHP는 내부적으로 정수 값을 부호 있는 것으로 저장합니다. unsigned long의 압축을 풀고 PHP 내부 저장 값과 크기가 같으면 unsigned unpacking이 지정되더라도 결과는 음수가 됩니다.

주의 요소의 이름을 지정하지 않으면 1부터 시작하는 숫자 인덱스가 사용됩니다. 이름이 지정되지 않은 요소가 두 개 이상 있는 경우 각 요소에 대해 번호가 1부터 다시 시작되기 때문에 일부 데이터를 덮어씁니다.

예제 #3 이름 없는 키가 있는 unpack() 예제

                  
<?php
$binarydata = "\x32\x42\x00\xa0";
$array = unpack("c2/n", $binarydata);
var_dump($array);
?
                  
                

위의 예는 다음을 출력합니다.

array(2) {
  [1]=>
  int(160)
  [2]=>
  int(66)
}
                

c 지정자의 첫 번째 값은 n 지정자의 첫 번째 값으로 덮어씁니다.


기타

  • pack() - 데이터를 이진 문자열로 압축