[BCB問題]關於空字串的處理 |
尚未結案
|
Titan_Lin
一般會員 發表:10 回覆:6 積分:3 註冊:2004-08-18 發送簡訊給我 |
我現在再寫一個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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
|
Titan_Lin
一般會員 發表:10 回覆:6 積分:3 註冊:2004-08-18 發送簡訊給我 |
|
richtop
資深會員 發表:122 回覆:646 積分:468 註冊:2003-06-10 發送簡訊給我 |
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; k
|
pwipwi
版主 發表:68 回覆:629 積分:349 註冊:2004-04-08 發送簡訊給我 |
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 發送簡訊給我 |
|
andychang1690
資深會員 發表:20 回覆:694 積分:442 註冊:2003-03-14 發送簡訊給我 |
|
Titan_Lin
一般會員 發表:10 回覆:6 積分:3 註冊:2004-08-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |