현재 위치: > 최신 기사 목록> Pack ( "N", 12345)이 예상 결과를 얻지 못하는 이유는 무엇입니까?

Pack ( "N", 12345)이 예상 결과를 얻지 못하는 이유는 무엇입니까?

M66 2025-06-02

php에서 pack () 함수는 지정된 형식의 이진 문자열로 데이터를 패키지하는 데 사용됩니다. 많은 개발자가 네트워크 프로토콜 또는 이진 파일을 처리 할 때 사용합니다. Pack ( "N", 12345) 은 일반적인 사용법이며, 이는 정수 12345가 대형 엔드 바이트 순서 (네트워크 바이트 순서)의 4 바이트 바이너리 스트링에 포장되어 있음을 의미합니다.

그러나 때로는 Pack ( "N", 12345)을 사용한 후 얻은 결과가 예상 한 출력과 일치하지 않으며 16 진수 또는 출력으로 변환 될 때 "이상한"것처럼 보일 수도 있습니다. 이게 왜? 이 기사는 그 뒤에있는 원칙을 분석하는 데 도움이됩니다.


1. 팩의 의미 ( "N", 12345)

형식 문자 "n"pack () 에 표시됩니다.

  • N : 서명되지 않은 긴 (4 바이트, 32 비트 서명되지 않은 정수)

  • Big-Endian, 즉 높은 바이트가 앞쪽에 있고 낮은 바이트가 뒤쪽에 있습니다.

예를 들어, 정수 12345 의 16 진수 표현은 0x3039 이고 해당 4 바이트 빅 엔디안은 다음과 같습니다.

 00 00 30 39

따라서 팩 ( "N", 12345) 에 의해 생성 된 이진 스트링은이 4 바이트로 16 진수로 변환되어야합니다.


2. 왜“룩”잘못된가?

많은 사람들은 결과가 "잘못 보인다"는 결과를 관찰하고 일반적인 이유는 다음과 같습니다.

  • 보이지 않는 문자가 많이 포함 된 브라우저 나 터미널에 바이너리 문자열을 직접 출력하거나 일부 바이트가 aarrbled 코드처럼 보이는 제어 문자로 구문 분석됩니다.

  • 이진 결과는 16 진수 또는 Base64와 같은 읽기 가능한 형식으로 변환되지 않습니다 .

  • 결과의 기대는 실제 의미와 일치하지 않습니다 . 예를 들어, Pack ( "N", 12345) 이 숫자 문자열 "12345"를 직접 출력한다고 생각합니다.


3. 결과를 올바르게 보는 방법

다음 PHP 코드를 작성한다고 가정합니다.

 <?php
$binary = pack("N", 12345);
echo bin2hex($binary);
?>

작업의 결과는 다음과 같습니다.

 00003039

이것은 예상 4 바이트 빅 엔디안 결과입니다.

echo $ binary를 사용하는 경우; $ Binary는 일반 텍스트가 아닌 이진 데이터이므로 직접 garbled 코드 또는 공백이 표시됩니다.


4. 전형적인 오해

오류 데모 :

 <?php
echo pack("N", 12345);
?>

웹 페이지 나 터미널에 출력하면 차량이 있거나 보이는 문자가 표시되지 않습니다. 이것은 팩 () 의 결과가 잘못되었다고 실수로 생각하게 만듭니다.


5. 요약

  • Pack ( "N", 12345)는 숫자 12345를 나타내는 Big-Endian 바이트 순서로 4 바이트 바이너리 스트링을 반환합니다.

  • 결과는 문자열 "12345"가 아닌 이진 데이터입니다.

  • 결과를 볼 때는 bin2Hex () 또는 유사한 방법을 사용하여 읽을 수있는 형식으로 변환하는 것이 가장 좋습니다.

  • 이진의 직접 출력은 겉보기에는 "이상한"결과를 가져올 수 있지만 오류는 아닙니다.


6. 참조 코드 예제

 <?php
// 번호를 넣으십시오12345포장4바이트 빅 엔디안 바이너리
$binary = pack("N", 12345);

// 이진의 16 진수 표현을 보여줍니다,편리한 관찰
echo "Hex representation: " . bin2hex($binary) . "\n";

// 또한 사용할 수 있습니다 unpack 항-응축
$unpacked = unpack("N", $binary);
echo "Unpacked number: " . $unpacked[1] . "\n";
?>

실행 후 출력 :

 Hex representation: 00003039
Unpacked number: 12345

7. 읽기를 확장하십시오

  • 에 대한 PHP 공식 문서

  • 이진 데이터 처리에 대한 Endian의 중요성을 이해하십시오

  • 네트워크 프로토콜과 이진 데이터의 관계