請問TMemoryStream與buffer的問題 |
尚未結案
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 請問各位先進,小弟使用TMemoryStream讀檔案時,都必須要先設一個buffer,例如buf[512],來存TMemoryStream->Memory裡面的東西,使用memcpy,但請問各位高手,要怎樣寫才能夠讓TMemoryStream->Size讓程式動態設定buffer的size,而不是預先先設定好內定的定值??willchen 你好: 不是可以動態配置記憶體嗎?? < class="code"> BYTE* pbData=NULL; DWORD dwSize=0; dwSize=ms->Size; pbData=new BYTE[dwSize]; ms->Read(pbData, dwSize); // ... Do something... delete pbData; -- Enjoy Researching & Developing --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
dllee
站務副站長 發表:321 回覆:2519 積分:1711 註冊:2002-04-15 發送簡訊給我 |
不太清楚您的問題...
TMemoryStream 可以直接讀檔呀,如:
TMemoryStream *stm=new TMemoryStream; stm->LoadFromFile("ABCD.xxx");buf[512],來存TMemoryStream->Memory裡面的東西 用 stm->ReadBuffer(buf,512);就可以把 stm 內的資料 copy 到 buf 內。 另外,如果需要動態設定 TMemoryStream 的 Size 就直接指定即可,如: stm->Size=1024;使用 TMemoryStream 本來就是要應付不定大小的資料量,善用 Size, Position, Memory 的屬性及 ReadBuffer(), WriteBuffer() 的方法就可以順利操作 TMemoryStream。 哇,不知到包大人已回了... 看到包大人的回應,我想到,其實,如果您的資料就已經在 TMemoryStream 內,最快的方法就是用指標直接指到 TMemoryStream 中您所想要處理的資料即可,例如: BYTE* pbData=NULL; pbData=(BYTE*)stm->Memory; // 當 BYTE 陣列 for(int i=0;i這樣,也不必 copy 來 copy 去,只要一個指標,直接就可以使用了。 沒空更新的網頁... http://dllee.ktop.com.tw C及指標教學,計算機概論,資訊管理導論... http://dllee.adsldns.org 介紹Shells,LiteStep,GeoShell.... 發表人 - dllee 於 2003/09/22 22:45:31
------
http://www.ViewMove.com |
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 剛剛try了一下,請問dllee與包子哥,怎麼把BYTE的陣列資料列在Memo上顯現出來??不能compile正常ㄋㄟ willchen 你好: (1)不能 compile 正常?? 我猜是因為程式中的 ms 代表 TMemoryStream*,但是 我沒有完整的寫出來,再麻煩你試一試好嗎?? >> szTemp="">ProcessMessages(); } Memo1->Text=szTemp; (4)以上的範例程式碼並沒有實際 compile 過,麻煩你先自己試一試 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
willchen
初階會員 發表:64 回覆:81 積分:29 註冊:2003-05-23 發送簡訊給我 |
AnsiString agenttext=""; char buf[1024]; TMemoryStream *filestream=new TMemoryStream(); filestream->LoadFromFile(CurrentDir "\\input\\" sr.Name); //char buf[filestream->Size]; memset(buf,0x00,sizeof(buf)); memcpy(buf,filestream->Memory,filestream->Size); //Sleep(2); agenttext=buf; Memo1->Text=agenttext; delete filestream; DeleteFile((CurrentDir "\\input\\" sr.Name).c_str());以上是我程式的片段,我現在利用char buf[1024]存TMemoryStream的資料 我是想可不可以讓char buf[1024]的空間變成動態配置,而不是固定1024的size 而是filestream->size值,包子哥你說的使用IntToHex這個function會不會導致資料經過轉換就會不是原來TMemorystream的資料??所以可以的話盡量使用char來存資料,小弟我還是比較偏好使用copy比較簡單,畢竟使用for loop有可能會有算錯的情況發生(index算錯) |
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言:AnsiString agenttext=""; char buf[1024]; TMemoryStream *filestream=new TMemoryStream(); filestream->LoadFromFile(CurrentDir "\\input\\" sr.Name); //char buf[filestream->Size]; memset(buf,0x00,sizeof(buf)); memcpy(buf,filestream->Memory,filestream->Size); //Sleep(2); agenttext=buf; Memo1->Text=agenttext; delete filestream; DeleteFile((CurrentDir "\\input\\" sr.Name).c_str());以上是我程式的片段,我現在利用char buf[1024]存TMemoryStream的資料 我是想可不可以讓char buf[1024]的空間變成動態配置,而不是固定1024的size 而是filestream->size值,包子哥你說的使用IntToHex這個function會不會導致資料經過轉換就會不是原來TMemorystream的資料??所以可以的話盡量使用char來存資料,小弟我還是比較偏好使用copy比較簡單,畢竟使用for loop有可能會有算錯的情況發生(index算錯) willchen 你好: (1)有關動態配置記憶體的方法,我已經在第一篇回覆你的文章中說過,我也就 不再多說了 (2)利用 IntToHex 這個 function 只是純粹把每個 BYTE 的值,轉換成字串顯 示在 Memo 裡面,但並不會改變到原來記憶體裡面每個 BYTE 的值;那為什 麼要轉換呢?? 因為 Memo 只能夠接受 Printable 的字元,例如: 假設某個 BYTE 裡面的值為 0x0B 的話,利用 IntToHex 這個 function 轉換成字串的 結果為 "0B" 就可以直接貼到 Memo 裡面,可是如果沒有經過轉換的話,直 接把 0x0B 貼到 Memo 裡面,你想~~Memo 該顯示什麼呢?? 是不是難為它了 ?? 不過,有一個特例~~那就是假設你載入的檔案內容是一個純文字文件的話 ,那就可以避開這個問題,應該可以直接利用 Memo1->Text=(char*)pbData; 而不需要經過轉換,就可以直接把原始檔案的內容顯示在 Memo1 裡面,不過 如果要這樣做的話,可能直接用 Memo1->Lines->LoadFromFile(...); 比較 快吧;而且,這種方式跟我前面一開始說的方式兩種意義是不相同的,有沒 有用過 UltraEdit 呢?? 試著利用 UltraEdit 把一個純文字文件打開,一開 始會看到原始文件的內容 (這就是我說的後者的方式),接著把 UltraEdit 的檢視模式轉換到十六進位的模式 (這就是我說的前者的方式),再試試看, 你應該就會了解我在說什麼了 > --
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |