這是使用的「C++」結構。使用PHP讀取二進制文件
struct gross
{
char date[11];
char ac[128];
char type[5];
float mvalue;
float netraw;
float netfer;
char stat[128];
float firr;
float acb;
};
這是使用GCC編譯器編譯時生成的二進制文件的內容。
1995年12月12日ð我們12.23 34.12 90.12費12 56.12 01/01/1998一個我們52.23 54.12 10.12費92 16.12 31/12/1999一個我們52.23 54.12 10.12費92 16.12 31/12/1999 d us 12.23 34.12 90.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 10.12費用92 16.12 31/12/2010 d us 12.23 34.12 90.12費用12 56.12
PHP編碼讀取cont上面的二進制文件的入口。
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);
?>
這就是我從上面的代碼得到的。我所得到的是第二和第七領域中的大量垃圾值。精度超過浮點數字段。如何解決這個問題?
1995年12月12日d¸³M·克·EW·¤dw·AEW·我們·YYYY,瓦特·O;·W·Ìª¹¿ô{·{·
01/01/1998a¸³M·克·EW·¤dw·AEW·我們·YYYY,瓦特· Ø; W·Ìª¹¿ô{·{·
A#Ä5RP·0#O·XW·X«¹¿·ÅÿÿýŽäSg·XW·ÆD¬¹¿L¬¹¿5rP·POY· 92 16.120000839233 31/12/1999 aa³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø; w·Ìª¹¿ô{·{·<·Ð{·SpP·ip ·¤dw·ew·€5w·ôOg· X«¿»qP·äSgus 52.229999542236 54.119998931885 10.119999885559費用·5rP·#·Sg·rP·ô#·5rP·0·o·xxw·x« ¹¿·ÅÿÿýŽäSg·XW·ÆD¬¹¿L¬¹¿5rP·POY·92 16.120000839233
31/12/1999d¸³M·克·EW·¤dw·AEW·我們·YYYY,瓦特· Ø; W·Ìª¹¿ô{·{·
A#Ä5RP·0#O·XW·X«¹¿·ÅÿÿýŽäSg·XW·ÆD¬¹¿L¬¹¿5rP·POY·12 56.119998931885 01/01/2000 aa³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø; w·Ìª¹¿ô{·{·<·Ð{·SpP·ip·¤ dw·ew·€5w·ôOg· X«¿»qP·äSgus 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/2000zó³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø; ··········································fees fees 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12············· RP·O> A#Ä5RP·0#O·XW·X«¹¿·ÅÿÿýŽäSg·XW·ÆD¬¹¿L¬¹¿5rP·POY·12 56.119998931885
31/12/2010a¸³M·克·EW·¤dw·AEW·我們·YYYY,瓦特·O;·W·Ìª¹¿ô{·{·
31/12/2010d¸³M·g·ew·¤dw·àew·Öúr·ÿÿÿÿ,w·ø; w ·Ìª¹¿ô{·{·
A#Ä5RP·0#O·XW·X«¹¿·ÅÿÿýŽäSg·XW·ÆD¬¹¿L¬¹¿5rP·POY·12 56.119998931885
它可能是你的編譯器輸出的是文件的方式和方法的PHP腳本之間的字符編碼的區別打開該文件。試着找出是什麼類型的編碼,以及是否可以在php中打開該文件,同時指定如何讀取它。 –