アプリ版:「スタンプのみでお礼する」機能のリリースについて

php でバイナリ文字列を任意の値(0x00〜0xff)の列で初期化して
これをファイルに書き込もうとしているのですがpackでどうも
うまくいきません。この部分の書き方を教えていただけますでしょうか。

<?php
$bin = 0x12 . 0x34;
$nstr = pack('H*', ord($bin));
file_put_contents( 'kwrname.mid', $nstr );
?>

> php be.php
> od kwrname.mid
000000 49
000001

A 回答 (2件)

私の環境では2例目も動作します。


コピー&ペーストして動作しませんか?
何かエラーメッセージ等が表示されますか?
動かない原因はわかりません。
    • good
    • 0
この回答へのお礼

環境は RaspberryPi PHP 5.4 です。
もう少し調査してみます。ありがとうございます。

お礼日時:2017/04/07 09:09

> $bin = 0x12 . 0x34;



上記は、文字列の 1852 になります。

pack と ord の使い方も間違っています。

http://jp2.php.net/manual/ja/function.pack.php
http://jp2.php.net/manual/ja/function.ord.php

バイナリを書き込みたいだけなら下記です。

<?php
$bin = chr(0x12) . chr(0x34);
file_put_contents('kwrname.mid', $bin);
?>

<?php
$bin = pack('H*', '1234');
file_put_contents('kwrname.mid', $bin);
?>

$ od -t x1 kwrname.mid
0000000 12 34
0000002
    • good
    • 0
この回答へのお礼

さっそく回答いただきましてありがとうございます。
1番目の例で動作しました。これを機にこの辺をもう一度勉強したいと思います。
なお、なぜか2例目は動きません。

お礼日時:2017/04/06 17:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!