之前用C 在做二進位讀檔時,是用fread函數,來指定紀錄的大小,<br>fread(&layer,2,1,fpr)<br>然後在VB用Input(2, #1) 來讀<br>結果卻不一樣,C是「17」,VB是「E 」<br>請問用VB來做的話怎麼指定讀取的長度?
寫的有點亂,我意思是說C可以用fread來指定讀取的size, 而vb如果是用Input來指定讀取的「字」數,就會不一致, 請問用VB來做的話怎麼指定讀取的size?
純Byte二進位讀檔,可用InputB
我這裡有一段fread的說明,我key一下請大家參考看看。 -------------------- 函數:int fread(void *buffer, int size, int count, FILE *fp) 用途:從檔案中讀取資料至記憶體區塊 說明:fp 檔案指標 buffer輸入資料暫存區位址 size 每筆記錄的大小 count 記錄筆數 fread()可從檔案之中讀取count個長度為size的資料,並將之存入buffer所指位址內,因此總共讀出count*size個bytes,上述的void*buffer宣告表示buffer可以為任意資料型態的指標。 傳回值:實際讀取的項目個數。 ---------------------- 總之就是,請問如何用vb來做出和C的這個函式一樣的效果? 謝謝!~
謝謝您的解答。 我用inputB來讀,結果資料不一樣。 只有讀出「 」還有「?」還有「」。
我想是因為C在讀時就可以先指定「型態」, 而VB是固定以「String」來讀,所以才不行?
如果已先知道每筆記錄的Size, 既然會C先參考一下http://vb.infoserv.com.tw/newVB6/SVBR.VB.6.new0g12.html應該不難
以 Binary 模式開啟檔案就可以了,查 Open 及 Get 指令的用法
先宣告 Byte 陣列大小,再 Get 即可。
感謝大家的解答。 這個二進檔,是先讀出一個sizeof(signed short int)的值後(大概2個Byte吧),才能判斷接下來是讀sizeof(signed short int)或sizeof(char)或其他的型態。一直讀到結束,所以沒辦法事前知道長度。 我只會用Get一次讀一個Byte出來,請問如何用Get一次讀一個「型態」出來? 用Byte陣列一次全讀出來,還是得重組。邊讀邊組會不會比較方便?
Get 會依照你宣告的型態來決定要讀取的值;如: Dim A As Byte,B As Integer,C As Long Get#1,,A -> 讀取 1 個Byte Get#1,,B -> 讀取 2 個Byte Get#1,,C -> 讀取 4 個Byte 依此類推. 只要仔細看說明,也能達到 C 的功能的
原來是這樣,我懂了! 謝謝!
Byte 陣列請宣告為你要取得長度的大小