ひとりアドベントカレンダー2015 第17日目 〜 PHPer でもバイナリをいじってみたい その2

  • このエントリーをはてなブックマークに追加
  • Pocket

17日目です!

きのうの続きで PHP でバイナリプログラミングシリーズ その2をやりたいと思います。

 

バイナリ文字列のリテラル表現

前回、PHP でのバイナリデータは文字列型と同じであることを見ました。が、そう考えたとき例えば、16進数で CA FE BA BE  という並びのバイトを PHP のソース上でバイナリデータ、すなわち文字列として表現したいときどうすればいいかという問題に当たります。少し考えを巡らせてみて、16進数のリテラル表現が 0xCA  などと書けることは知っているので、つぎのように書けるかな?と試してみましたが・・・

だめでした。これでは

 と出力され、単に 0xCA = 202, 0xFE = 254, 0xBA = 186, 0xBE = 190  と、16進数を10進数に直した文字列を繋いだだけのものになってしまい、 CA FE BA BE というバイト列にはなりません。いろいろ調べると、どうやら正しくは  "\xCA\xFE\xBA\xBE" と書くようです:

この結果をファイルにリダイレクト出力して hexdump してみると、

 のように確かに  CA FE BA BEという4バイトが出力されていることがわかります。 

というか、バイナリ文字列がこのようなリテラルで書けることの説明が、明日あたりに取り上げる unpack() 関数の使用例 くらいにしか見当たらないのですが、公式ドキュメントとかどこかに書いてあるのでしょうか?ご存知のかた教えて下さい・・・

 

まとめ

今日はPHPにおけるバイナリ文字列のリテラル表記を取り上げました。これで簡単にバイナリデータを作成できるので、明日以降でこれを使っていろいろやりたいと思います。

 

  • このエントリーをはてなブックマークに追加
  • Pocket

SNSでもご購読できます。

コメントを残す

*