2013-04-04 116 views
1

我打開一個DBF作爲VB.Net中的二進制文件來確定結構。我必須這樣做,因爲使用Visual FoxPro OLEDB驅動程序不會返回小數位字段的精度和小數位數。我順利地完成了我的任務,沒有任何問題。我遇到的問題是這樣的:在VB.Net中讀取DBF文件結構爲二進制文件

字節0是DBF文件類型。
字節1-3是最後更新(yymmdd)。
DBF文件的字節4-7是文件中的記錄數。
字節8-9是第一個數據記錄的位置。
字節10-11是一條數據記錄的長度,包括刪除標誌。
(該信息來自http://www.dbf2002.com/dbf-file-format.html

以下是前32個字節我的DBF文件的,由連字符分隔:

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-1-3-0-0

「48」(十六進制30)表示Visual Foxpro
字節1-3表示該文件最後更新於2/6/2013。
字節4-7表示該文件有158條記錄。
所有這些都是正確的。

字節8-9是168和9,以及字節10-11是18和3

實際記錄大小爲786個字節。由於有68個字段,第一個數據記錄的位置應該是(68x32 + 31)= 2207.

是否有一些轉換我必須將1689轉換爲2207和183轉換爲786?

我試過十六進制十六進制,反之亦然。

回答

4

我認爲你的2207不正確,但786 IS正確。

相信值是基於由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 
+0

這樣做了!爲什麼這對其他值沒有必要? – Richard 2013-04-04 01:47:47

+1

@Richard,可能是因爲最大字段數的偏移量會超過255個字節,但是具有低/ hi順序的2個字節將允許多達65535字節的頭(永遠不會發生),所以它們只需要兩個字節的值。 – DRapp 2013-04-04 01:50:53

+0

Got it!謝謝! – Richard 2013-04-04 01:52:58