1

我在 VB.Net 中将 DBF 作为二进制文件打开以确定结构。我必须这样做,因为使用 Visual Foxpro OLEDB 驱动程序不会返回十进制字段的精度和小数位数。我成功地完成了我的任务,没有任何问题。我遇到的问题是:

字节 0 是 DBF 文件类型。
字节 1-3 是最后一次更新 (yymmdd)。
DBF 文件的字节 4-7 是文件中的记录数。
字节 8-9 是第一个数据记录的位置。
字节 10-11 是一条数据记录的长度,包括删除标志。
(此信息来自http://www.dbf2002.com/dbf-file-format.html

以下是我的 DBF 文件的前 32 个字节,用连字符分隔:

48-13-2-6-158-0-0-0-168-9-18-3-0-0-0-0-0-0-0-0-0-0-0-0-0- 0-0-0-1-3-0-0

“48”(十六进制 30)表示 Visual Foxpro
字节 1-3 表示该文件最后一次更新是在 2013 年 2 月 6 日。
字节 4-7 表示该文件有 158 条记录。
所有这些都是正确的。

字节 8-9 是 168 和 9,字节 10-11 是 18 和 3。

实际记录大小为 786 字节。由于有 68 个字段,所以第一个数据记录的位置应该是 (68x32+31) = 2207。

我必须进行一些转换才能将 1689 转换为 2207 并将 183 转换为 786?

我已经尝试将 dec 转换为十六进制,反之亦然。

4

1 回答 1

4

我认为您的 2207 不正确,但 786 是正确的。

我相信这些值基于低/高字节位置,由​​ 256 的幂表示,因为它也在备忘录文件中处理,但 4 个字节值得......

18 * 256^0 ( to the power 0 )  = 18 * 1  = 18
 3 * 256^1 ( to the power 1 )  = 3 * 256 = 768

18 + 768 = 786

现在,另一个也一样...

168 * 256^0 ( to the power 0 )  = 168 * 1  = 168
  9 * 256^1 ( to the power 1 )  = 9 * 256 = 2304

168 + 2304 = 2472
于 2013-04-04T01:44:42.013 回答