네트워크 프로그래밍에서 Endian 데이터 순서는 매우 중요한 개념입니다. 다른 컴퓨터 아키텍처는 빅 엔디안과 리틀 엔디안의 다른 엔디 언 주문을 채택 할 수 있습니다. 네트워크 프로토콜은 일반적으로 큰 엔지니어 (네트워크 엔지니어라고도 함)를 사용하므로 데이터를 보낼 때 데이터를 큰 엔지니어 형식으로 변환해야합니다.
PHP에서 Pack () 함수는 지정된 형식으로 데이터를 패키지하는 편리한 방법을 제공합니다. 이 기사는 팩 ( "N") 기능을 사용하여 정수 데이터를 네트워크 엔디언 (Big-Endian) 형식으로 변환하는 방법을 설명합니다.
Pack () 는 PHP의 내장 기능으로 데이터를 지정된 형식의 이진 문자열로 변환합니다. 정수, 플로팅 포인트, 문자열 등을 포함한 다양한 형식을 지원합니다.이 기능은 종종 네트워크 통신, 파일 쓰기 및 다양한 바이너리 프로토콜 처리에 사용됩니다.
기능 프로토 타입 :
string pack(string $format, mixed $values, mixed ...$values2);
$ 형식 : 형식 문자열, 데이터 유형 및 순서를 지정하십시오.
$ 값 : 포장 해야하는 값.
Pack () 의 형식에서 "n" 은 16 비트 부호없는 정수가 네트워크 엔지니어 (Big-Endianness)에 포장되어 있음을 의미합니다.
N : 16 비트 서명되지 않은 짧은 단편.
대조적으로, V 는 또한 16 비트의 서명되지 않은 짧은 정수가 소규모 엔디안 바이트 오더 (Little-Endian)를 채택한다는 것을 나타냅니다.
네트워크 바이트 순서의 이진 문자열에 0x1234를 패키지하려면 다음과 같이 쓸 수 있다고 가정 해 봅시다.
<?php
$number = 0x1234;
$packed = pack("n", $number);
echo bin2hex($packed); // 산출:1234
?>
여기서, pack ( "n", $ 숫자)은 0x12 및 0x34 의 바이트 순서의 바이너리 스트링으로 숫자 0x1234를 변환합니다.
Pack ( "V", $ 숫자)을 사용하는 경우 출력은 Endian Byte 순서가 거의 없습니다.
<?php
$number = 0x1234;
$packed = pack("v", $number);
echo bin2hex($packed); // 산출:3412
?>
네트워크 프로토콜에서는 포트 번호 및 길이와 같은 16 비트 번호가 종종 네트워크 바이트 순서로 전송되어야합니다. 예를 들어, 사용자 정의 네트워크 패키지 구성 :
<?php
// 포트 번호 8080 (0x1F90)
$port = 8080;
// 打包포트 번호为网络字节序
$packedPort = pack("n", $port);
// 데이터를 보낼 때 사용하십시오 $packedPort 올바른 엔지니어를 보장 할 수 있습니다
?>
코드에서 URL을 사용해야하고 도메인 이름을 M66.net 으로 바꾸어야하는 경우 (예 :
<?php
$url = "https://m66.net/path/to/resource";
echo "액세스 주소: " . $url;
?>
실제 응용 프로그램에서 필요한 도메인 이름을 유연하게 교체 할 수 있습니다.
요약하면, Pack ( "N")은 PHP의 네트워크 엔디 어 (Big-Endian)에 16 비트 부호없는 정수를 포장하는 가장 직접적이고 효과적인 방법이며 네트워크 프로토콜과 관련된 이진 데이터 처리에 매우 적합합니다.