2

すべて 8 ビット整数のバイナリ ファイルがあります。php unpack() 関数を使用しようとしましたが、1 バイト整数に対して機能する引数を取得できません。「n」/「v」引数を使用できるように、データをダミー バイトと結合しようとしました。これを行うためにWindowsマシンを使用しています。最終的には、8 ビットのバイナリ整数の文字列に基づいて整数の配列を返す関数が必要です。私が試したコードは以下のとおりです -

$dat_handle = "intergers.dat";
$dat_file = fopen($dat_handle, "rb");
$dat_data = fread($dat_file, 1);
$dummy = decbin(0);
$combined = $dummy.$dat_data;
$result = unpack("n", $combined);
4

2 に答える 2

4

探しているのは char データ型です。cこれには、署名付き (小文字) と署名なし (大文字)の 2 つのバージョンがありますC。データに適したものを使用してください。

<?php
    $byte = unpack('c', $byte);
?>

また、データ ファイルが単なるバイトの集まりであり、その長さがわかっている場合は、これを行うことができます。(長さが 16 符号付き文字列の場合。)

<?php
    $bytes = unpack('c16', $byte);
?>

ファイルに含まれるバイト数がわからないが、バイト数しかないことがわかっている場合は、アスタリスク コードを使用して EOF まで読み取ることができます。

<?php
    $bytes = unpack('c*', $byte);
?>
于 2011-04-29T02:46:38.000 に答える
1

以下はあなたが望むことをするはずです(ord):

$dat_handle = "intergers.dat";
$dat_file = fopen($dat_handle, "rb");
$dat_data = ord(fread($dat_file, 1));

あなたがやろうとしているのは、単一バイトの整数値を取得することです。一度に 1 バイトずつ読み取るため、有効な ASCII 文字は常に 1 つだけです。ordその 1 文字のバイナリ値を返します。

于 2011-04-29T02:15:57.697 に答える