2012-04-02 12 views
2

コードを試しています。ファイルに16進数データを書き込む

<?php 
$tmp = ord('F'); //gives the decimal value of character F (equals 70) 
$tmp = $tmp - 55; //gives 15 - decimal equivalent of 0x0F 
$tmp = dechex($tmp); // converts 15 to 0x0F 
$fp = fopen("testing.data","wb+"); 
fwrite($fp,$tmp); 
fclose($fp); 
?> 

私はバイナリエディタでtesting.dataと呼ばれるファイルを開くと、私は2つのバイトが書かれて参照してください。 2バイトは0x36と0x33です。 私は、0x0fという1バイトしかファイルに書き込まれないと予想しています。これは起こりません。 これで私を助けてください。

答えて

5

ファイルへのバイト0x0fを書きたい場合は、単にそのASCIIコードで文字を書きます。あなたは効果的ordを元に戻すにしたい、と逆の機能はchrです:

<?php 
$tmp = ord('F'); //gives the decimal value of character F (equals 70) 
$tmp = $tmp - 55; //gives 15 - decimal equivalent of 0x0F 
$tmp = chr($tmp); // converts 15 to a character 
$fp = fopen("testing.data","wb+"); 
fwrite($fp,$tmp); 
fclose($fp); 
?> 
+2

+1 'chr'が容易になり、ここで仕事をしていません。 'pack'はもっと汎用性があり、指定されたバイトオーダフォーマット(リトルエンディアン、ビッグエンディアンなど)でマルチバイト値の変換が可能です。 – knittl

+0

ありがとう! :-)私は正反対のことを試みていた。 – user1051505

5

数字0x0Fの文字列表現をファイルに書き込みます(1文字あたり1バイトを使用します)。

PHPでは、pack関数を使用してバイナリ文字列を作成します。

$bindata = pack('n', 0x0F); 
file_put_contents('testing.data', $bindata); 
関連する問題