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

[BCB問題]關於空字串的處理

尚未結案
Titan_Lin
一般會員


發表:10
回覆:6
積分:3
註冊:2004-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-08-26 14:37:26 IP:211.20.xxx.xxx 未訂閱
我現在再寫一個DVD分析軟體  當我要利用memo來顯示讀取到的DVD資料區段(以十六進位碼表示) (比如說: 01 43 44 30 30 31 01 00  20 20 20 20 20 20 20 20 )    上面的資料是我用我找到的軟體所顯示的前16個位元的資料 但是當我要自己寫一個的時候  發現資料顯示出來只有顯示到"01 43 44 30 30 31 01"  因為memo把"01 43 44 30 30 31 01 00  20 20 20 20 20 20 20 20" 中的"00"視為結束字元'\0'   (01 43 44 30 30 31 01 00  20 20 20 20 20 20 20 20 為一AnsiString字串  而'\0'的十六進位碼正是0x00 所以遇到0x00就會視為結束字元)    請問我要如何處理才能把資料完整的顯示出來 我已經困擾好久了  
ENIX007
高階會員


發表:28
回覆:274
積分:185
註冊:2003-11-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-08-26 15:12:05 IP:203.70.xxx.xxx 未訂閱
Titan_Lin您好 小弟測試結果不會押... 能請問您是怎麼發生的呢??  
 void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString str = "01 43 44 30 30 31 01 00 20 20 20 20 20 20 20 20";
  Memo1->Lines->Add(str);
}
顯示結果正常 程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
------
程式迷人之處,在於邏輯思考,然而卻也是惱人之處~~
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-08-26 15:25:20 IP:211.76.xxx.xxx 未訂閱
Titan_Lin 您好:    底下一段程式碼供您參考修改。 class="code">//--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString msg = Memo1->Lines->Strings[0]; // 內容為"Memo1" ShowMessage(msg); msg[3]=0; ShowMessage(msg); ShowMessage(msg.Length()); AnsiString result="result:"; for (int k=1; k<=msg.Length(); k ) { result = " " IntToHex( (unsigned char)msg[k],2 ); } ShowMessage(result); } //--------------------------------------------------------------------------- RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
ubong
一般會員


發表:2
回覆:42
積分:23
註冊:2002-10-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-08-26 22:37:31 IP:218.163.xxx.xxx 未訂閱
不知道你是如何讀檔。照你的需求,我想你應該用fgetc(FILE *fp) 來讀檔,也就是說一字字的讀而不是一行行的讀。 ubong
------
ubong
Titan_Lin
一般會員


發表:10
回覆:6
積分:3
註冊:2004-08-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-08-27 02:07:22 IP:210.66.xxx.xxx 未訂閱
其實我自己沒有把東西說清楚... 第一次問問題 很多細節沒有講清楚 先抱歉一下咧.. 比說我用 > 各位老大幫幫忙 拜託~ 發表人 -
richtop
資深會員


發表:122
回覆:646
積分:468
註冊:2003-06-10

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-08-27 21:55:53 IP:211.76.xxx.xxx 未訂閱
Titan_Lin 您好:    一個在先前假設條件下,勉強符合您需求的程式碼供您參考。 注意事項: > class="code">//--------------------------------------------------------------------------- void __fastcall TForm1::Button3Click(TObject *Sender) { AnsiString result, temp; AnsiString msg = Memo1->Lines->Strings[0]; // 內容為"Memo123456798abcdefghijklmnopqrstuvwxyz" int len; msg = "Memo123456798abcdefghijklmnopqrstuvwxyz"; msg[3] = 0; // 測試控制碼 msg[5] = 0xFF; // 超過正常ASCII範圍 for (int k=0; k127) ) temp = "."; else temp = msg[k index]; } if ( len<16 ) { while( result.Length()<(5 3*16 1) ) result = " "; } result = temp; Memo1->Lines->Add(result); } } //--------------------------------------------------------------------------- RichTop 敬上 =====***** 把數學當工具,可以解決問題;將數學變能力,能夠發現並解決問題! =====#####
pwipwi
版主


發表:68
回覆:629
積分:349
註冊:2004-04-08

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-08-27 22:59:20 IP:211.76.xxx.xxx 未訂閱
Titan_Lin你好:     我有接到你的來信,以下是相關的程式碼(Show Hex)  
char *SnapLine(char *szBuf, LPSTR mem, int len, int dwid, unsigned long olbl)
{
    int            i;
    int            j;
    unsigned char  c;
    unsigned char  buff[80];
    unsigned char  tbuf[80];        if (len > dwid)
        len = dwid;             *szBuf = 0;        // Show offset for this line.
    sprintf((char *)tbuf, "X:X ", olbl >> 16, olbl & 0xFFFF);
    strcpy(szBuf, (char *)tbuf);        // Format hex portion of line and save chars for ascii portion
    for (i = 0; i < len; i  )
    {
        c = *mem  ;            sprintf((char *)tbuf, "X ", c);
        strcat(szBuf, (char *)tbuf);            if (c >= 32 && c < 127)
            buff[i] = c;
                  else
            buff[i] = 46;
    }        j = dwid - i;        buff[i] = 0;        // Fill out hex portion of short lines.
    for (i = j; i > 0; i--)
        strcat(szBuf, "   ");        // Add ascii portion to line.
    sprintf((char *)tbuf, " |%s|", (char *)buff);
    strcat(szBuf, (char *)tbuf);             // Fill out end of short lines.
    for (i = j; i > 0; i--)
        strcat(szBuf, " ");        return(szBuf);
}
 
這段程式碼的來源是 http://www.codeproject.com/threads/MDumpAll.asp 也是一個觀察記憶體內容的原始碼範例
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-08-28 01:51:09 IP:61.142.xxx.xxx 未訂閱
引言: 其實我自己沒有把東西說清楚... 第一次問問題 很多細節沒有講清楚 先抱歉一下咧.. 比說我用 class="code"> 不知道要如何做 ps.我有嘗試過用AnsiString一個可忽略'\0'的建構子來處理 可是都沒用... 各位老大幫幫忙 拜託~ 發表人 - > >>>>>
------
Andy Chang
andychang1690
資深會員


發表:20
回覆:694
積分:442
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-08-28 01:54:48 IP:61.142.xxx.xxx 未訂閱
對不起上篇多Post,請版主刪除上篇。
引言: 其實我自己沒有把東西說清楚... 第一次問問題 很多細節沒有講清楚 先抱歉一下咧.. 比說我用 > 各位老大幫幫忙 拜託~ 發表人 - > >>>>>
------
Andy Chang
Titan_Lin
一般會員


發表:10
回覆:6
積分:3
註冊:2004-08-18

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-08-29 14:50:40 IP:61.218.xxx.xxx 未訂閱
謝謝各位大大的幫忙  總算寫出來了      超級感激
系統時間:2024-07-06 1:12:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!