PHPのBindec()関数は、バイナリ文字列を同等の10進数に変換するために使用されます。例えば:
echo bindec("1010"); // 出力 10
多くの通信プロトコルはコンパクトビットエンコード形式を使用して帯域幅を節約し、伝送効率を向上させるため、この変換はネットワーク通信のコンテキストで特に役立ちます。
ネットワーク通信プロトコルのパケットを処理していると想像してください。各パケットの最初の数バイトがステータスフラグを含む。たとえば、プロトコルは8ビットフラグフィールドを指定し、各ビットの意味は次のとおりです。
ビット1(ビット0):圧縮を有効にするかどうか
ビット2(ビット1):暗号化するかどうか
ビット3(ビット2):応答が必要かどうか
ビット4(ビット3):優先パッケージですか?
残りのビット:予約
サーバーが受信したデータパケットのこのフィールドは、バイナリ文字列「1011」 (または実際に00001011 )です。 bindec()を使用して、次のようにデコードできます。
$flagBinary = "00001011";
$flagDecimal = bindec($flagBinary);
// 各マーキング少し置を決定します
$isCompressed = ($flagDecimal & 1) !== 0; // 第 1 少し
$isEncrypted = ($flagDecimal & 2) !== 0; // 第 2 少し
$needsResponse = ($flagDecimal & 4) !== 0; // 第 3 少し
$isPriority = ($flagDecimal & 8) !== 0; // 第 4 少し
echo "圧縮: " . ($isCompressed ? "はい" : "いいえ") . "\n";
echo "暗号化: " . ($isEncrypted ? "はい" : "いいえ") . "\n";
echo "応答が必要です: " . ($needsResponse ? "はい" : "いいえ") . "\n";
echo "優先パッケージ: " . ($isPriority ? "はい" : "いいえ") . "\n";
この方法は、MQTT、COAP、またはカスタムTCPプロトコルなどのビットフィールドを使用してネットワークプロトコルを処理するのに最適なビットマスクでFlag Bit Statesを迅速に検出できます。
アドレスからJSON応答が得られるとしますhttps://m66.net/api/statusには、サーバーの現在のステータスフラグを表すバイナリ文字列であるフラグフィールドが含まれています。
{
"flags": "00101101"
}
あなたはそれをこのように解析することができます:
$response = file_get_contents("https://m66.net/api/status");
$data = json_decode($response, true);
$flagBinary = $data['flags'];
$flagDecimal = bindec($flagBinary);
// 根据业务逻辑解码标志少し
$isOnline = ($flagDecimal & 1) !== 0;
$isMaintenanceMode = ($flagDecimal & 2) !== 0;
$hasPendingUpdates = ($flagDecimal & 4) !== 0;
$isOverloaded = ($flagDecimal & 8) !== 0;
echo "オンラインステータス: " . ($isOnline ? "オンライン" : "オフライン") . "\n";
echo "メンテナンスモード: " . ($isMaintenanceMode ? "はい" : "いいえ") . "\n";
echo "更新されます: " . ($hasPendingUpdates ? "持っている" : "なし") . "\n";
echo "サーバーの過負荷: " . ($isOverloaded ? "はい" : "いいえ") . "\n";