Position actuelle: Accueil> Derniers articles> Utilisation complémentaire de pack () et ord ()

Utilisation complémentaire de pack () et ord ()

M66 2025-06-06

1. Utilisation de base de Pack ()

La fonction Pack () emballe la chaîne de format spécifiée et les données en chaînes binaires. Par exemple, Pack ("C", 65) renvoie une chaîne binaire contenant un seul caractère avec le code ASCII 65 (c'est-à-dire le caractère "A"). Les chaînes de format sont utilisées pour décrire la disposition des données. Les codes de format commun comprennent:

  • C : caractères non signés (8 bits, plage 0–255)

  • N : entier court non signé (16 bits, Big-endian Endian)

  • N : entier long non signé (32 bits, Big-endian Endian)

  • H * : chaîne hexadécimale (priorité bit élevée)

Par exemple:

 $bin = pack("C*", 72, 101, 108, 108, 111); // Caractères correspondants "Hello"
echo $bin; // Sortir Hello

Ce processus revient à convertir un tableau d'entiers en une chaîne binaire comprimée.


2. Utilisation de base de l'ORD ()

Contrairement à Pack () , ord () est utilisé pour convertir les caractères en valeurs ASCII ou Unicode correspondantes. Il s'agit d'un "décodeur" de pack () et est très utile lors de l'extraction des données des chaînes binaires.

Par exemple:

 $char = "A";
$ascii = ord($char); // retour 65

Cette fonction est très adaptée à la coopération avec Pack () afin de restaurer l'octet de données d'origine de la chaîne codée.


3. Relation complémentaire entre les deux

Utilisez Pack () lors du codage des données en binaire et utilisez ORD () lors de l'extraction de Binary. Cela constitue une relation complémentaire entre les deux. Par exemple, nous pouvons d'abord emballer une séquence de nombres, puis analyser l'octet d'octet:

 $data = [77, 54, 54];
$bin = pack("C*", ...$data);

// Lisez chaque octet
for ($i = 0; $i < strlen($bin); $i++) {
    echo ord($bin[$i]) . "\n"; // Sortir 77, 54, 54
}

Dans ce code, nous utilisons Pack () pour convertir le tableau [77, 54, 54] en une chaîne binaire de trois octets, tandis que l'ORD () le restaure à la valeur numérique d'origine par octet.

Cette technique est particulièrement utile lors de la construction de messages binaires pour des protocoles spécifiques. Par exemple, construisez un package de demande de lien court similaire à:

 $url_id = 1234;
$payload = pack("N", $url_id);
file_put_contents("http://m66.net/api/store", $payload);

Une fois que le serveur a reçu ces données de 4 octets, elle peut être analysée comme suit:

 $data = file_get_contents("php://input");
$url_id = unpack("N", $data)[1];

Ici pack ("n", $ url_id) et déballer ("n", $ data) sont exactement une paire d'opérations complémentaires.


4. Exemples de scénarios pratiques

Par exemple, lors de la mise en œuvre d'une sorte de protocole de chiffrement léger ou de transmission personnalisée, vous devrez peut-être convertir les informations de texte en valeurs numériques, effectuer un traitement de décalage avant de les encapsulant en binaire:

 $text = "Hi!";
$encrypted = "";
for ($i = 0; $i < strlen($text); $i++) {
    $encrypted .= pack("C", ord($text[$i]) + 1);
}
// Décryptage
$decrypted = "";
for ($i = 0; $i < strlen($encrypted); $i++) {
    $decrypted .= chr(ord($encrypted[$i]) - 1);
}
echo $decrypted; // Sortir Hi!

Dans cet exemple, Ord () transforme les caractères en nombres, Pack () s'enroule en binaire, et le décryptage est restauré avec ord () puis décalé.