• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:php のバイナリデータ操作について)

phpのバイナリデータ操作で詰まっています

このQ&Aのポイント
  • バイナリデータ操作で詰まっている方へ。phpのバイナリデータ操作で2byteのデータを4bitずつに取り出し、データをチェックする方法を教えてください。
  • バイナリデータ操作の方法を教えてください。phpでバイナリファイルから読み込んだ2byteのデータを4bitずつに取り出し、データをチェックする方法を試してみましたがうまくいきません。
  • phpのバイナリデータ操作に詳しい方へ。バイナリファイルから読み込んだデータをマスクしてシフトし、2byteのデータを4bitずつに取り出す方法を教えてください。試してみた結果、意図したデータではなくなってしまいました。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

まずは衝撃の実験結果から。 http://ideone.com/MSHFT そう。「ABCDではない」のです。 …つまり、「0xFFFF」と論理積をとっても、それは「下位16bitではない」のです。 というわけで、下位16bitがとれるよう、16bit全てが1となるようなものを pack関数にかましたものとビット演算を行ってみると自分の希望通りのものが出力されました。(このサイトPHP 5.2.11でhex2binの対応バージョンが書かれていないので、多分使えないのでしょう) http://ideone.com/hbV1U

colagum_love
質問者

お礼

回答遅れました。すみません。 衝撃でした。 ありがとうございます。

その他の回答 (1)

  • shimix
  • ベストアンサー率54% (865/1590)
回答No.1

私だったら、こんな感じでバラしますかねぇ。 <?php $str = chr(126) . chr(14); $out = array(); for ($i = 0; $i < strlen($str); $i++) { $tmp = bin2hex(substr($str, $i, 1)); $tmp = (strlen($tmp) == 1) ? '0' . $tmp : $tmp; $out[] = substr($tmp, 0, 1); $out[] = substr($tmp, 1, 1); } print "<pre>"; print_r($out); print "</pre>"; ?> >4bitずつに取り出して、データをチェックしたいです。 のチェックがどういうものか次第で最適解も変わってくると思います(上記は文字列で比較する前提です)。どういうチェックをするかを書いていただくといいかもしれません。

colagum_love
質問者

お礼

回答遅れました。すみません。 サンプルまで作っていただき ありがとうございます。 参考にさせていただきました。

関連するQ&A