線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2361
推到 Plurk!
推到 Facebook!

各位大大.........一個讀取.bin檔的問題?

尚未結案
kevinhue
一般會員


發表:23
回覆:42
積分:13
註冊:2003-05-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-02 18:09:42 IP:218.160.xxx.xxx 未訂閱
各位大大你好: 以下的程式是我想要讀一個.bin檔的程式,可是讀出來之後的值卻不見了, 比如說:有一筆資料02 01 00 FF FF FF 03 02 10是這樣的,但是讀到TMS之後 就只剩02 01兩筆資料..........???怎麼會這樣勒???可以麻煩各位大大 幫我看看好嗎??? >>>>
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-02 18:19:32 IP:210.241.xxx.xxx 未訂閱
TMemoryStream *TMS=new TMemoryStream(); char *pt; String kk,buffer; TMS->Size=131072; TMS->LoadFromFile(OpenDlg->FileName); TMS->Size; //你可以看一下,問題在這裏時,檔案大小還是對的 //也就是說,檔案是有正確讀進來的,問是在於你下面轉換時的問題 pt=(BYTE *)TMS->Memory; kk=pt; buffer = kk; delete TMS;
kevinhue
一般會員


發表:23
回覆:42
積分:13
註冊:2003-05-06

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-02 18:33:21 IP:218.160.xxx.xxx 未訂閱
親愛的turboted: ㄣ??看不出來有什麼問題ㄟ??? Kevinhue
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-02 20:23:52 IP:218.16.xxx.xxx 未訂閱
LongString 配合 Pointer 使用時是 Null Terminated 的所以當它讀到 00 便當 String 已完結不整後面的值了 對 binary data 不應以 String 來說理,buffer 應以 Array of Char 為佳。
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-02 20:59:34 IP:211.76.xxx.xxx 未訂閱
引言: 各位大大你好: 以下的程式是我想要讀一個.bin檔的程式,可是讀出來之後的值卻不見了, 比如說:有一筆資料02 01 00 FF FF FF 03 02 10是這樣的,但是讀到TMS之後 就只剩02 01兩筆資料..........???怎麼會這樣勒???可以麻煩各位大大 幫我看看好嗎??? >>>>>< face="Verdana, Arial, Helvetica"> 以上結果完全合理, 但是可能你一時沒有想到 Q:還記得C的字串以什麼作結尾嗎? ^^ A: 沒錯, 就是NULL =>就是 '\0'=> 也就是Hex的0x00, Do you remember? 02 01 00 FF FF FF 03 02 10 所以很自然的, 因為你宣告String kk,buffer; 強制把kk, buffer都當成AnsiString-->也就是字串-->也就是說遇到'\0'就要終止 於是乎 02 -> 01 -> 00 !!! Bingo, 遇到'\0' 終止往後讀取 這樣子了解JustMade的意思了吧 < > >>> <---是多餘的< >
turboted
版主


發表:95
回覆:754
積分:452
註冊:2002-07-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-03 09:12:34 IP:210.241.xxx.xxx 未訂閱
不好意思,來晚了 我在程式裏面,加上了一行 TMS->Size 主要是要讓您知道 bin file 在load進來到memorystream後,還是正常的 可以由TMS->Size看到 由此可知,問題是出在你接下來的字串動作 lcsboy板主解說的非常的明白,希望您能找到答案
kevinhue
一般會員


發表:23
回覆:42
積分:13
註冊:2003-05-06

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-03 09:39:45 IP:218.160.xxx.xxx 未訂閱
請問各位大大: 那假如說要用Array of Char那程式要怎麼改才好勒??
lcsboy
版主


發表:87
回覆:622
積分:394
註冊:2002-06-18

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-03 10:59:13 IP:211.23.xxx.xxx 未訂閱
引言: 請問各位大大: 那假如說要用Array of Char那程式要怎麼改才好勒??
這個問題...應該是先問你想要怎麼作吧? 不用作法不同寫法 我假設你只是要秀出> > > class="code"> for (int i=0; i< Count; i ) buffer =kk.printf("%.2Xh ", *(pt )); 然後你用ShowMessage(buffer); 就會看到00h 01h 00h FFh FFh ... 不知是否合用
kevinhue
一般會員


發表:23
回覆:42
積分:13
註冊:2003-05-06

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-03 14:06:03 IP:218.160.xxx.xxx 未訂閱
各位大大你好: 下面的程式是可以做到我想要的,但是,有一個問題,有沒有辦法在開啟檔案的時候,可以抓到檔案的長度........... TMS->LoadFromFile(OpenDlg->FileName); TMS->Size=buff; pt=(BYTE *)TMS->Memory; for (int i=0; i< buff; i ) { buffer=buffer *(pt ); Application->ProcessMessages(); } delete TMS; } kevinhue
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-03 14:25:38 IP:140.135.xxx.xxx 未訂閱
kevinhue您好:   您指的是資料長度吧??   那TMS->Size就是了   所以for (int i=0; i< TMS->Size; i++) 改成這樣應該可以吧    順心 <>~我也是在學習的階段,所以請您多多見諒與指教~
kevinhue
一般會員


發表:23
回覆:42
積分:13
註冊:2003-05-06

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-03 14:27:39 IP:218.160.xxx.xxx 未訂閱
報告各位大哥:我已經找到了我錯誤的地方.... TMS->LoadFromFile(OpenDlg->FileName);    TMS->Size; pt=(BYTE *)TMS->Memory; for (int i=0; i< TMS->Size; i )[/red] { buffer=buffer *(pt ); Application->ProcessMessages(); } delete TMS; } 謝謝各位的指教.........感恩ㄒㄒ
系統時間:2024-05-18 5:15:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!