我有一个 DBF 文件,它是作为带有rgdal库writeOGR函数(在 R 中)的 shapefile 的一部分创建的。
当我要求使用 Linuxod命令查看它的第一个字节时,我得到以下信息。
od -x -c -N 32 BRA.dbf
0000000 7703 1e07 001b 0000 00a1 00d1 0000 0000
0000020 0000 0000 0000 0000 0000 0000 5700 0000
0000040
我的 PHP 代码是这样的。
$dbf = fopen('BRA.dbf','rb');
fread($dbf,10); // jumps over the first 10 bytes
$dbfRecSize = unpack('v',fread($dbf,2))[1]; // 'v' = little endian 16 bits: 00d1 = d1(16) = 209
fread($dbf,17); // jumps over a few more bytes
$dbfLangID = ord(fread($dbf,1)); // language driver ID
if ($dbfLangID == 0x57) {
echo "Language: 0x57 (ISO-8859-1)\n";
} else {
echo "Language: $dbfLangID;\n";
}
上面的代码输出“Language: 0x57 (ISO-8859-1)”,这意味着接近od输出末尾的“57”正在被ord(fread($dbf,1));命令读取。
奇怪的是,我从文件中读取了 10+2+17 = 29 个字节,所以下一个字节应该是“00”,还是不是(在 0x57 之后)?$dbfRecSize是 209,这意味着我的逻辑在前两次读取中是正确的。为什么不在下面的阅读中?
我在这里误解了什么?
婷婷同学_