2008/08/31

PHPでバイナリデータを取り扱う その1

PHPでバイナリデータを生成するにはpack()関数を使用する。
http://jp.php.net/manual/ja/function.pack.php

例えば以下のように文字列と混在させても問題ない。
// 0x03 0x00 0x20 0x61 0x0D 0x00A 0x04
$binData = pack("n", 0x0300) . " a\r\n" . pack("c", 0x04);
「PHP バイナリ」でググってもなかなかpack()関数までたどり着けないのでメモ。


これだけじゃあなんなのでもう一つ。

strlen()関数やsubstr()関数はバイナリセーフである。
http://jp.php.net/manual/ja/function.strlen.php

// 0x03 0x00 0x20 0x61 0x0D 0x00A 0x04
$binData = pack("n", 0x0300) . " a\r\n" . pack("c", 0x04);

echo strlen($binData); // 結果は7
// Windowsの改行コードである"\r\n"
// が長さ2と数えられているのにも注意

$cho = substr($bindata, 1, 3); // 0x00 0x20 0x61 が格納される

これは他の言語から入った人だとびっくりする結果ではなかろうか?

0 件のコメント: