全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4272
推到 Plurk!
推到 Facebook!

請問二進制資料與ASCII之間的資料如何轉換

尚未結案
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-11-17 19:29:32 IP:218.164.xxx.xxx 未訂閱
請教各位大大 小弟是初學delphi不久的菜鳥 最近遇到一個問題 若我有一個二進制資料檔 我想把它轉進程式裏面 將之轉換成可讀的ascii的文字資料 再將之萃取到資料庫 問題是小弟怎麼讀, 在memo1.text上看到都是亂碼 可否請各位大大不吝為小弟開釋一下方法 感謝各位大大!
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-11-17 19:56:22 IP:202.39.xxx.xxx 未訂閱
procedure ShowCode(ACode: string);
Var sShow, sCatch: string;
  i: integer;
begin
  sShow := '';
  for i := 1 to Length(ACode) do begin
    sCatch := Format('%X', [Ord(ACode[i])]);
    if Length(sCatch) = 1 then
      sCatch := '0'   sCatch;
    sShow := sShow   sCatch   ' ';
  end;
  Delete(sShow, Length(sShow), 1);
  Memo1.Lines.Add(sShow);
end;
[/quote] -- Everything I say is a lie. 發表人 - hagar 於 2002/11/17 19:58:23
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-11-17 21:24:09 IP:218.164.xxx.xxx 未訂閱
謝謝hagar版主的指導 小弟這就去寫看看 真的很感謝^^
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-11-18 17:14:06 IP:61.222.xxx.xxx 未訂閱
各位前輩及版主大人, 小弟一直試不出 不知如何將二進制檔寫入時就轉成ASCII檔 是否可以寫個完整的範例程式, 謝謝您的不吝指導 而版主大人寫的副程式,因為小弟是初學者,試了好久都會有錯誤 只好厚著臉皮再向您請益, 希望您能不吝撥空指導 我原本用Memo1.Lines.LoadFromFile('aaa.bin'); 其中aaa.bin是二進制檔案 小弟看DELPHI了徹底研究這本書 第6章的6-12範例用的方式大約如下 但我想改成由二進檔檔案讀入,再將二進制轉成文字檔寫到MEMO1上 但卻一直出現錯誤 BinStream:TMemoryStream; StrStream:TStringStream; BinStream.LoadFromFile('c:\aaa.dds'); //aaa.dds是一個二進制檔 BinStream.Seek(0,soFromBeginning); ObjectBinaryToText(BinStream,StrStream);//將二進制轉成文字檔 StrStream.Seek(0,soFromBeginning); Memo1.text:=StrStream.DataString;
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-11-18 17:40:52 IP:147.8.xxx.xxx 未訂閱
ObjectBinaryToText is used for component writing (e.g. in text dfm) and I think it is not the function you need. BTW, what do you mean by binary file? It would be helpful if you could provide more details (e.g. filespec, first 30 bytes of the file). This is an example of reading from an untyped file:
var
    AFile: file of byte;
    Buffer: array[0..1024] of byte;
    Count,bRead: integer;
    i: integer;
    s: string;
begin
    Memo1.Clear;
    AssignFile(AFile,'c:\aaa.bin');
    reset(AFile);
    try
        s := '';
        while not EOF(AFile) do begin
            Count := SizeOf(Buffer);
            BlockRead(AFile,Buffer,Count,bRead);
            for i := 1 to bRead do begin
                s := s   Format('%.2x ',[Buffer[i-1]]);
                if (i mod 8) = 0 then begin
                    Memo1.Lines.Add(s);
                    s := '';
                end;
            end;
            if s<>'' then
                Memo1.Lines.Add(s);
        end;
    finally
        CloseFile(AFile);
    end;
end;
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-11-19 10:02:40 IP:210.58.xxx.xxx 未訂閱
Hello poemkevin 兄您好: 您的.bin檔是這二元檔沒錯, 但是要將他轉成一般我們所看的文字並不是直接讀取裡面的值, 我想您可能要先知道這個二元檔裡面的結構是如何才有辦法轉,最簡單的方法是用例如UltraEdit這種可看它儲存碼的軟體先簡視一下.除非您是要讀出他所儲存的"數字".那樓上兩位先進的程式就可以. Good Luck 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-11-19 15:59:53 IP:61.222.xxx.xxx 未訂閱
真的很感謝前輩們的指導    可是弟是想要將機器讀到的檔案轉成可見的文字檔 弟之前也有用16位元編輯器去看過  如同上面那二位前輩所教的 所轉成的檔,是16位元檔 然而我要看的卻是它的文字資料 因為機器轉成的檔是需用日本公司附的軟體才能看到資料庫文件 它提供的程式一定也不符合我的需求 弟想將它那資料萃取出來到資料庫內 只是因為機器自動儲存的是二進檔 弟不知該如何轉成文字檔 例如將 <75 20 59 44 01 00 01 00 >型態轉成可見字元 這部份 縱使用16位元編輯器去看, 只能少部份可以看見一些可辦識的字元 如「日期或型號的英文就很清楚的看見,沒有亂碼錯誤」 ,而其他大都是亂碼 如「便 ? $ @ ?溟?? ? k J @ B」 這類的亂碼 唉... 真不知如何去解決 因為那些都是資料庫數據資料 難道非得靠日本人寫的軟體不行嗎 真是難過 >.< 它轉出來的資料都是二進制檔 這個檔用它的軟體 可看到像我們在資料庫看到的資料類似DATAGRID, 也可以看到資料的趨勢圖及圓柱圖
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-11-19 16:28:57 IP:210.58.xxx.xxx 未訂閱
Hello poemkevin 兄您好: 小弟個人猜想看不到的原因可能是TMemo並無支援他所對應的碼, 可能是Unicode或其他編碼, 你可先將他檔案的內容先轉到html網頁 檔試試, 在Browser上讀讀看, 切換各種編碼看能否看到裡面內容. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-11-19 16:53:42 IP:61.222.xxx.xxx 未訂閱
引言: Hello poemkevin 兄您好: 小弟個人猜想看不到的原因可能是TMemo並無支援他所對應的碼, 可能是Unicode或其他編碼, 你可先將他檔案的內容先轉到html網頁 檔試試, 在Browser上讀讀看, 切換各種編碼看能否看到裡面內容. 我不是高手, 高手是正在銀幕前微笑的人.
Dear Miles君: Miles兄您所說的方式,弟也try過,內容除了某部份英文看得出來 其他的都是亂碼, 而這些亂碼資料照它機器所比對的 應該是數字資料, 只是不知為何就是顯示不出來 我猜想它可能有經過壓縮轉換過,因為它那個二進制檔雖才500多KB 但資料卻有16CHANEL共9000多筆記錄 除了日期型號及頻道的英文字可以看出外 其餘的大都是亂碼字元 我把它檔案放在網路上好了 http://home.pchome.com.tw/web/ptgfr/10010904.47w http://home.pchome.com.tw/web/ptgfr/10012202.58w 檔案名是機器依時間所命名的 您可以開看看 在這裏小弟真的很感謝各位前輩能撥空看小弟的問題 不管有沒有真正解決小弟的問題 小弟都很感謝大家的幫忙^^
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-11-20 12:02:29 IP:210.58.xxx.xxx 未訂閱
poemkevin 非常抱歉: 我試著想去解開他但卻失敗了, 看來您需要找出裡面自訂的格式才有辦法解, 試著去詢問原來的公司看能否提供規格. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-11-20 12:22:41 IP:147.8.xxx.xxx 未訂閱
The web server has added some banner codes.. Maybe you could try to upload them somewhere else. One way to guess is try to change a little bit (e.g. single field) and compare the file before and after the change. Beware of the license since reverse engineering sometimes may violate the terms in the license.
poemkevin
初階會員


發表:26
回覆:77
積分:30
註冊:2002-10-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-11-21 21:35:20 IP:218.164.xxx.xxx 未訂閱
非常感謝幾位前輩的幫忙 小弟找時間再將機器的日文資料看一看好了 看能不能找到資料解讀方面的資料 它應該是有壓縮編碼過吧 只是不太曉得它的運算方式 才一直解不出來 唉....日本人真詐, 連機器輸出資料檔案都要保護 >.<    
引言: The web server has added some banner codes.. Maybe you could try to upload them somewhere else. One way to guess is try to change a little bit (e.g. single field) and compare the file before and after the change. Beware of the license since reverse engineering sometimes may violate the terms in the license.
系統時間:2024-04-25 17:39:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!