$ php -r 'var_dump(unpack("C*", "ABC"));' array(3) { [1]=> int(65) [2]=> int(66) [3]=> int(67) }
何でだろうと思ってソースを見てみたらこんなコードを見つけた。
(ext/standard/pack.c)
if (arg != 1 || namelen == 0) { /* Need to add element number to name */ snprintf(n, sizeof(n), "%.*s%d", namelen, name, i + 1); } else { /* Truncate name to next format code or end of string */ snprintf(n, sizeof(n), "%.*s", namelen, name); }
このi + 1がそれっぽいが、何のために1足してるんだろう。というかソース見るまで忘れてたけど、PHPのunpackは連想配列を返すんだった。
$ php -r 'var_dump(unpack("C*hoge", "ABC"));' array(3) { ["hoge1"]=> int(65) ["hoge2"]=> int(66) ["hoge3"]=> int(67) }
そうか。この"hoge1","hoge2","hoge3"の"hoge"の部分が無くなったから1,2,3になるのか。