これはここでの最初の質問です。エラーがある場合は事前にお詫び申し上げます。
私は現在、PHP を実行している Web サーバーと通信する C++ プログラムを含むプロジェクトに取り組んでいます。
私は PHP の unpack/pack を何度も使用しましたが、常にバイト全体を使用し、通常は float と int32、およびパディングされた文字列を使用します。しかし、帯域幅を節約するために、C からの出力をより小さな整数に「圧縮」することにしました。
これが私の問題です:
PHP が C から取得するデータは、おおよそ次のようになります (その 1 バイト)。
(uint8_t)hc.OnOff << 1
| (uint8_t)hc.No1 << 2
| (uint8_t)hc.No2 << 3
| (uint8_t)hc.No3 << 4
| (uint8_t)hc.No4 << 5
| (uint16_t)hc.No5 << 6;
私はこれを多くの方法で開梱しようとしました。しかし、適切な結果が得られません。そして、ビットに関しては、私はただの愚か者であることを知っています。:)
私が得た最も近いものは、次のようなものを使用しています:
$bit = unpack('C*', $bit);
$bit = $bit['1'];
$bin = decbin(ord($bit));
$bin = str_pad($bin, 8, 0, STR_PAD_LEFT);
しかし、それはまだ期待される結果ではありません。
他のヒントを得た人はいますか?
そして、バイナリの知識が乏しいことをお詫びします。このトピックについてさらに読む必要があることはわかっています。