4

Cコーディングを使用してバイナリファイルを作成しました。これがそのバイナリ ファイルの構造です。

struct emp
{
   int eid,eage;
   char name[20],city[20];
}record;

この「C」構造を使用して、「table1.txt」というバイナリファイルを作成しました

次に、php を使用して Web ページにファイルの内容を表示したいと考えています。これどうやってするの ?

<html>
<head>
<title>binary file</title></head>
<body style="background-color:yellow">
<?
$fp = fopen("table1.txt", "rb");
$read = fread($fp, 4); 
$n = unpack("i", $read);
$data1 = fread($fp, 8);
$nn = unpack("i",$data1);
echo $number[1]; 
?>
</body>
</html>

上記のコードを使用しました。しかし、ファイルの最初のフィールドしか読み取れません。私の最初のレコード フィールドは従業員 ID で、その値は「0」です。ページには 0 しか表示されません。

4

2 に答える 2

1

奇妙な理由で、各データセグメントは予想どおり48バイトではなく、52バイトです。

$f = fopen('data.txt', 'rb');

while (!feof($f)) {
  // read one segment of 52 bytes
  if ($s = fread($f, 52)) {
    // unpack the binary structure into an associative array
    print_r(unpack('ieid/ieage/a20name/a20city', $s));
  }
}

fclose($f);
于 2012-06-05T12:08:11.833 に答える
1

これが「C」構造です。struct グロス { char date[11]; char ac[128]; 文字タイプ[5]; float mvalue; フロート netraw; フロート netfer; char stat[128]; フロートモミ; フロートacb; };

GCCコンパイラでコンパイルした時のバイナリファイルの内容です。

12/12/1995 D US 12.23 34.12 90.12料金12 56.12 01/01/1998 A US 52.23 54.12 10.12料金92 16.12 31/12/12/12/12/12 12 56.12 01/01/2000 A US 52.23 54.12 10.12料金92 16.12 01/01/2000 Z US 12.23 34.12 90.12料金12 56.12 31/12/2010 A US 52.23 54.12 90.12 手数料 12 56.12

上記バイナリファイルの内容を読み取るためのPHPコーディングです。

echo "<table>";
while (!feof($f)) {

  if ($s = fread($f, 292)) {

        $nn = unpack('a11date/a128ac/a5type/fmvalue/fnetraw/fnetfer/a128stat/ffirr/facb', $s);

        echo "<td>" . $nn[date] ."</td>";
        echo "<td>" . $nn[ac] . "</td>";
        echo "<td>" . $nn[type] . "</td>";
        echo "<td>" . $nn[mvalue] . "</td>";
        echo "<td>" . $nn[netraw] . "</td>";
        echo "<td>" . $nn[netfer] . "</td>";
        echo "<td>" . $nn[stat] . "</td>";
        echo "<td>" . $nn[firr] . "</td>";
        echo "<td>" . $nn[acb] . "</td>";
        echo "</tr>";
 }
}
        echo "</table>";
fclose($f);
?>

これは、上記のコードから得た答えです。2 番目と 7 番目のフィールドに大量のガベージ値が表示されます。また、float フィールドの精度を設定する方法。

1995 年 12 月 12 日 d¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 12 56.119998931885

1998 年 1 月 1 日 a¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 92 16.120000839233

1999 年 12 月 31 日 a¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 92 16.120000839233

31/12/1999 d¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 12 56.119998931885

01/01/2000 a¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 92 16.120000839233

01/01/2000 z¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 12 56.119998931885

31/12/2010 a¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 52.229999542236 54.119998931885 10.119999885559 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 92 16.120000839233

31/12/2010 d¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø;w·Ìª¹¿ô{·{·‹ây·Ð{·SpP·ip·¤dw·ew· €5w·ôOg· X«¹¿»qP·äSg us 12.229999542236 34.119998931885 90.120002746582 手数料·5rP· #Ä äSg· rP·ô›Å #Ä 5rP·0#o·¸xw·x«¹¿·ÅÿÿýŽäSg·¸xw ·ÆD¬¹¿L¬¹¿5rP·pòy· 12 56.119998931885

于 2012-06-07T12:26:38.957 に答える