Position actuelle: Accueil> Derniers articles> Comment utiliser la fonction Pack ("N") pour emballer les données dans Network Endian (Big-Endian)?

Comment utiliser la fonction Pack ("N") pour emballer les données dans Network Endian (Big-Endian)?

M66 2025-07-10

Dans la programmation réseau, l'ordre endian des données est un concept très important. Différentes architectures informatiques peuvent adopter des ordres endian différents: Big-endian et Little-Endan. Les protocoles de réseau utilisent généralement une grande endianness (également connu sous le nom de Network Endianness), ce qui nous oblige à convertir les données en format de grande endire lors de son envoi.

Dans PHP, la fonction Pack () fournit un moyen pratique de former des données dans un format spécifié. Cet article expliquera comment utiliser la fonction Pack ("N") pour convertir les données entières en un format de réseau endian (Big-Endian).


1. Quelle est la fonction Pack () ?

Pack () est une fonction intégrée en PHP qui convertit les données en chaînes binaires dans le format spécifié. Il prend en charge une variété de formats, notamment entier, le point flottant, la chaîne, etc. Cette fonction est souvent utilisée pour la communication réseau, la rédaction de fichiers et divers traitements de protocole binaire.

Prototype de fonction:

 string pack(string $format, mixed $values, mixed ...$values2);
  • $ Format : Format String, spécifiez le type et l'ordre des données.

  • $ Valeurs : la valeur qui doit être emballée.


2. Que signifie Pack ("N") ?

Dans le format String of Pack () , "N" signifie qu'un entier non signé 16 bits est emballé dans Network Endianness (Big-Enddianness).

  • N : court terme non signé, adoptant Big-Endien.

  • En revanche, V indique également que l'entier court non signé 16 bits adopte l'ordre des octets en petit-endian (Little-Endien).


3. Utilisez des exemples

Supposons que vous souhaitiez emballer un numéro 0x1234 dans une chaîne binaire dans l'ordre des octets réseau, vous pouvez l'écrire comme ceci:

 <?php
$number = 0x1234;
$packed = pack("n", $number);

echo bin2hex($packed); // Sortir:1234
?>

Ici, Pack ("N", Numéro $) convertit le numéro 0x1234 en une chaîne binaire avec ordre d'octet de 0x12 et 0x34 .

Si vous utilisez Pack ("V", Numéro $) , la sortie est un peu d'octet d'octet endian:

 <?php
$number = 0x1234;
$packed = pack("v", $number);

echo bin2hex($packed); // Sortir:3412
?>

4. Exemples de scénarios d'application

Dans les protocoles de réseau, des numéros 16 bits tels que le numéro de port et la longueur sont souvent nécessaires pour être envoyés dans l'ordre des octets réseau. Par exemple, construisez un package réseau personnalisé:

 <?php
// Numéro de port 8080 (0x1F90)
$port = 8080;

// 打包Numéro de port为网络字节序
$packedPort = pack("n", $port);

// Utiliser lors de l&#39;envoi de données $packedPort Il peut assurer la bonne endication
?>

5. Combiné avec des exemples d'URL réels

Si vous devez utiliser une URL dans votre code et que vous devez remplacer le nom de domaine par m66.net , par exemple:

 <?php
$url = "https://m66.net/path/to/resource";
echo "Adresse d&#39;accès: " . $url;
?>

Vous pouvez remplacer de manière flexible le nom de domaine dont vous avez besoin dans les applications réelles.


Pour résumer, Pack ("N") est le moyen le plus direct et le plus efficace d'emballer des entiers non signés 16 bits dans le réseau Endian (Big-endian) en PHP, et est très adapté au traitement des données binaires lié aux protocoles de réseau.