PHP의 pack() 함수는 데이터를 바이너리(binary) 문자열로 패킹하는 함수입니다. 네트워크 프로토콜 통신, 파일 형식 처리처럼 바이너리 수준의 데이터 조작이 필요한 경우에 매우 유용하게 활용됩니다.
문법
pack(format, args)
매개변수
format − 데이터를 패킹할 때 사용할 형식입니다. 지정할 수 있는 값은 다음과 같습니다.
a − NUL로 채워진 문자열
A − 공백(SPACE)으로 채워진 문자열
h − 16진수 문자열 (낮은 니블(nibble)부터)
H − 16진수 문자열 (높은 니블부터)
c − 부호 있는 char
C − 부호 없는 char
s − 부호 있는 short (항상 16비트, 시스템 바이트 순서)
S − 부호 없는 short (항상 16비트, 시스템 바이트 순서)
n − 부호 없는 short (항상 16비트, 빅 엔디안)
v − 부호 없는 short (항상 16비트, 리틀 엔디안)
i − 부호 있는 정수 (시스템 의존적인 크기와 바이트 순서)
I − 부호 없는 정수 (시스템 의존적인 크기와 바이트 순서)
l − 부호 있는 long (항상 32비트, 시스템 바이트 순서)
L − 부호 없는 long (항상 32비트, 시스템 바이트 순서)
N − 부호 없는 long (항상 32비트, 빅 엔디안)
V − 부호 없는 long (항상 32비트, 리틀 엔디안)
f − float (시스템 의존적인 크기와 표현 방식)
d − double (시스템 의존적인 크기와 표현 방식)
x − NUL 바이트
X − 한 바이트 뒤로 이동(백업)
Z − NUL로 채워진 문자열
@ − 지정한 절대 위치까지 NUL로 채움
args − 패킹할 하나 이상의 인수입니다.
반환값
pack() 함수는 전달된 데이터가 담긴 바이너리 문자열을 반환합니다.
예제
아래 예제에서는 C3 포맷을 사용하여 부호 없는 char 3개를 하나의 바이너리 문자열로 패킹합니다.
<?php
echo pack("C3", 80, 72, 80);
?>
출력 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
PHP
아스키(ASCII) 코드에서 10진수 80은 'P', 72는 'H'에 해당하므로, 세 개의 정수 값이 각각 문자로 변환되어 최종적으로 "PHP"라는 문자열이 생성됩니다. 이처럼 pack() 함수를 활용하면 정수 값을 손쉽게 원하는 바이너리 형식으로 변환할 수 있습니다.