현재 위치: > 최신 기사 목록> 팩 ( "C*") 및 배열 포장에 대한 실용적인 팁

팩 ( "C*") 및 배열 포장에 대한 실용적인 팁

M66 2025-05-29

PHP에서 Pack () 함수는 지정된 형식의 이진 문자열로 데이터를 패키지 할 수있는 강력한 도구이며 데이터 전송, 파일 쓰기 및 네트워크 프로토콜 구현과 같은 시나리오에서 널리 사용됩니다. 이 기사는 팩 ( "C*")을 사용하여 배열을 패키지하고 사용법, 실용적인 기술 및 일반적인 응용 프로그램을 분석하는 방법에 중점을 둡니다.


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*")을 사용하는 방법?

숫자 배열을 팩 ( "C*")을 통해 이진 데이터로 변환하려면 일반 단계는 다음과 같습니다.

  1. 숫자 값을 포함하는 배열을 준비하면 배열의 값은 0에서 255 사이 여야합니다.

  2. 매개 변수 포장 풀기 ( ... )를 사용하여 배열을 여러 매개 변수로 전달하십시오 ( "C*") .

  3. pack ()는 각 숫자를 하나의 바이트로 변환하고 이진 문자열을 반환합니다.

샘플 코드 :

 <?php
$array = [72, 101, 108, 108, 111]; // 해당 "Hello"
$binary = pack("C*", ...$array);

echo $binary; // 산출: Hello
?>

참고 : pack ()는 이진 문자열을 반환하며 Echo를 사용하여 직접 출력 할 수 없습니다. 시각적으로 보려면 Bin2Hex () 함수를 사용할 수 있습니다.

 echo bin2hex($binary); // 48656c6c6f

실용적인 팁

1. 배열이 비어있을 때 처리

배열이 비어 있으면 호출 팩 ( "c*", ... $ array)이 오류를보고합니다. 먼저 판단하는 것이 좋습니다.

 if (!empty($array)) {
    $binary = pack("C*", ...$array);
} else {
    $binary = '';
}

2. 범위를 벗어난 배열 요소

Pack ( "C*")은 요소가 0 ~ 255의 정수이어야하며 그렇지 않으면 예상치 못한 결과가 발생합니다. Array_Map을 사용하여 먼저 범위를 제한 할 수 있습니다.

 $array = array_map(function($v) {
    return $v & 0xFF; // 최저 만 유지하십시오8조금
}, $array);

3. 네트워크 데이터 패킷과 결합

패키지 데이터는 종종 사용자 정의 네트워크 프로토콜에 사용되며 정수 배열을 바이트 스트림으로 변환 한 다음 원격 서버로 보낼 수 있습니다.

예:

 $data = [1, 2, 3, 4];
$packet = pack("C*", ...$data);
$socket = stream_socket_client("tcp://m66.net:1234");
fwrite($socket, $packet);
fclose($socket);

일반적인 응용 프로그램 시나리오

1. 이진 파일 쓰기

때로는 그림 헤더 정보, 오디오 및 비디오 파일 등과 같은 이진 형식 파일을 작성해야합니다.

 $header = [0x89, 0x50, 0x4E, 0x47]; // PNG파일 서명
file_put_contents('file.png', pack("C*", ...$header));

2. 네트워크 프로토콜 데이터 인코딩

사용자 정의 프로토콜이 여러 필드를 보내면 숫자를 바이트 스트림으로 변환하는 것이 매우 일반적입니다.

3. 문자열과 바이트 배열을 변환합니다

Pack ( "C*")은 바이트 어레이를 문자열로 변환 할 수 있지만 ( "C*", $ str)는 역 작업을 구현할 수 있으므로 인코딩 및 디코딩이 더 쉬워집니다.


요약

  • Pack ( "C*")은 바이트 형식의 이진 문자열로 정수 배열을 패키지하는 데 사용됩니다.

  • 배열 요소는 0에서 255 사이 여야하며 빈 배열을 먼저 점검해야합니다.

  • 네트워크 전송, 파일 쓰기 및 프로토콜 개발과 같은 다양한 시나리오에 적합합니다.

  • 포장되지 않은 ( "C*")를 사용하여 양방향 변환을 달성하여 바이트 데이터를보다 유연하게 만듭니다.

합리적으로 팩 ( "C*")을 사용하면 이진 데이터를 효율적으로 처리하여 저수준 데이터 상호 작용에서 PHP를 더욱 강력하게 만들 수 있습니다.