La fonction Bindec () de PHP est utilisée pour convertir une chaîne binaire en son numéro décimal équivalent. Par exemple:
echo bindec("1010"); // Sortir 10
Cette conversion est particulièrement utile dans le contexte des communications réseau, car de nombreux protocoles de communication utilisent des formats de codage de bits compacts pour enregistrer la bande passante et améliorer l'efficacité de la transmission.
Imaginez que vous traitez un paquet d'un protocole de communication réseau, avec les premiers octets de chaque paquet contenant l'indicateur d'état. Par exemple, le protocole spécifie un champ de drapeau 8 bits, et la signification de chaque bit est la suivante:
Bit 1 (bit 0): s'il faut permettre la compression
Bit 2 (bit 1): s'il faut crypter
Bit 3 (bit 2): si une réponse est requise
Bit 4 (bit 3): Est-ce un package prioritaire?
Bits restants: réservé
Ce champ dans le paquet de données reçu par le serveur est la chaîne binaire "1011" (ou en fait 00001011 ). Nous pouvons utiliser Bindec () pour le décoder comme suit:
$flagBinary = "00001011";
$flagDecimal = bindec($flagBinary);
// Déterminer chaque position de marquage
$isCompressed = ($flagDecimal & 1) !== 0; // 1 et 1 1 Peu
$isEncrypted = ($flagDecimal & 2) !== 0; // 1 et 1 2 Peu
$needsResponse = ($flagDecimal & 4) !== 0; // 1 et 1 3 Peu
$isPriority = ($flagDecimal & 8) !== 0; // 1 et 1 4 Peu
echo "compression: " . ($isCompressed ? "Oui" : "Non") . "\n";
echo "cryptage: " . ($isEncrypted ? "Oui" : "Non") . "\n";
echo "Besoin d'une réponse: " . ($needsResponse ? "Oui" : "Non") . "\n";
echo "Package de priorité: " . ($isPriority ? "Oui" : "Non") . "\n";
Cette méthode peut rapidement détecter les états de bit de drapeau par un massasque, ce qui est idéal pour gérer les protocoles de réseau à l'aide de champs de bits tels que les protocoles MQTT, COPE ou personnalisés TCP.
Supposons que vous obteniez une réponse JSON à partir de l'adresse https://m66.net/api/status , qui contient un champ Flags , une chaîne binaire représentant l'indicateur d'état actuel du serveur:
{
"flags": "00101101"
}
Vous pouvez l'analyser comme ceci:
$response = file_get_contents("https://m66.net/api/status");
$data = json_decode($response, true);
$flagBinary = $data['flags'];
$flagDecimal = bindec($flagBinary);
// 根据业务逻辑解码标志Peu
$isOnline = ($flagDecimal & 1) !== 0;
$isMaintenanceMode = ($flagDecimal & 2) !== 0;
$hasPendingUpdates = ($flagDecimal & 4) !== 0;
$isOverloaded = ($flagDecimal & 8) !== 0;
echo "Statut en ligne: " . ($isOnline ? "En ligne" : "Hors ligne") . "\n";
echo "Mode de maintenance: " . ($isMaintenanceMode ? "Oui" : "Non") . "\n";
echo "À mettre à jour: " . ($hasPendingUpdates ? "avoir" : "aucun") . "\n";
echo "Surcharge du serveur: " . ($isOverloaded ? "Oui" : "Non") . "\n";