PHP에서 Pack () 함수는 지정된 형식의 이진 문자열로 데이터를 패키지 할 수있는 강력한 도구이며 데이터 전송, 파일 쓰기 및 네트워크 프로토콜 구현과 같은 시나리오에서 널리 사용됩니다. 이 기사는 팩 ( "C*")을 사용하여 배열을 패키지하고 사용법, 실용적인 기술 및 일반적인 응용 프로그램을 분석하는 방법에 중점을 둡니다.
pack () 함수의 기본 구문은 다음과 같습니다.
string pack ( string $format , mixed ...$values )
여기서 $ 형식은 데이터의 패키징 형식을 지정하는 반면 "C"는 매개 변수를 서명되지 않은 문자로 변환하는 것을 의미합니다 (예 : 1 바이트, 범위 0 ~ 255). "C*"는 서명되지 않은 문자 형식으로 여러 값을 포장하는 것을 의미하며, 이는 배열에서 각 요소를 단일 바이트로 인코딩하는 데 적합합니다.
예를 들어:
$data = [65, 66, 67];
$packed = pack("C*", ...$data);
echo $packed; // 산출 ABC
이 코드에서 65는 ASCII 문자 A 에 해당하고 66은 B 에 해당하고 67은 C 에 해당하므로 최종 출력은 문자열 "ABC" 입니다.
숫자 배열을 팩 ( "C*")을 통해 이진 데이터로 변환하려면 일반 단계는 다음과 같습니다.
숫자 값을 포함하는 배열을 준비하면 배열의 값은 0에서 255 사이 여야합니다.
매개 변수 포장 풀기 ( ... )를 사용하여 배열을 여러 매개 변수로 전달하십시오 ( "C*") .
pack ()는 각 숫자를 하나의 바이트로 변환하고 이진 문자열을 반환합니다.
샘플 코드 :
<?php
$array = [72, 101, 108, 108, 111]; // 해당 "Hello"
$binary = pack("C*", ...$array);
echo $binary; // 산출: Hello
?>
참고 : pack ()는 이진 문자열을 반환하며 Echo를 사용하여 직접 출력 할 수 없습니다. 시각적으로 보려면 Bin2Hex () 함수를 사용할 수 있습니다.
echo bin2hex($binary); // 48656c6c6f
배열이 비어 있으면 호출 팩 ( "c*", ... $ array)이 오류를보고합니다. 먼저 판단하는 것이 좋습니다.
if (!empty($array)) {
$binary = pack("C*", ...$array);
} else {
$binary = '';
}
Pack ( "C*")은 요소가 0 ~ 255의 정수이어야하며 그렇지 않으면 예상치 못한 결과가 발생합니다. Array_Map을 사용하여 먼저 범위를 제한 할 수 있습니다.
$array = array_map(function($v) {
return $v & 0xFF; // 최저 만 유지하십시오8조금
}, $array);
패키지 데이터는 종종 사용자 정의 네트워크 프로토콜에 사용되며 정수 배열을 바이트 스트림으로 변환 한 다음 원격 서버로 보낼 수 있습니다.
예:
$data = [1, 2, 3, 4];
$packet = pack("C*", ...$data);
$socket = stream_socket_client("tcp://m66.net:1234");
fwrite($socket, $packet);
fclose($socket);
때로는 그림 헤더 정보, 오디오 및 비디오 파일 등과 같은 이진 형식 파일을 작성해야합니다.
$header = [0x89, 0x50, 0x4E, 0x47]; // PNG파일 서명
file_put_contents('file.png', pack("C*", ...$header));
사용자 정의 프로토콜이 여러 필드를 보내면 숫자를 바이트 스트림으로 변환하는 것이 매우 일반적입니다.
Pack ( "C*")은 바이트 어레이를 문자열로 변환 할 수 있지만 ( "C*", $ str)는 역 작업을 구현할 수 있으므로 인코딩 및 디코딩이 더 쉬워집니다.
Pack ( "C*")은 바이트 형식의 이진 문자열로 정수 배열을 패키지하는 데 사용됩니다.
배열 요소는 0에서 255 사이 여야하며 빈 배열을 먼저 점검해야합니다.
네트워크 전송, 파일 쓰기 및 프로토콜 개발과 같은 다양한 시나리오에 적합합니다.
포장되지 않은 ( "C*")를 사용하여 양방향 변환을 달성하여 바이트 데이터를보다 유연하게 만듭니다.
합리적으로 팩 ( "C*")을 사용하면 이진 데이터를 효율적으로 처리하여 저수준 데이터 상호 작용에서 PHP를 더욱 강력하게 만들 수 있습니다.