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

如何儲存字串並判斷

答題得分者是:taishyang
messguy
一般會員


發表:1
回覆:2
積分:0
註冊:2008-09-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-09-18 11:15:26 IP:203.68.xxx.xxx 訂閱

[code cpp]
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
const BufSize = 4096;
unsigned char Buffer[BufSize];
int nBytes = 0;

while((nBytes=YbCommDevice1->ReadPackage(Buffer,BufSize))>0) // 用comport讀入數據
{
AnsiString s;
for(int i=0; i s = IntToHex(Buffer[i],2) " ";
s = s.Trim();

if(!s.IsEmpty())
Memo1->Lines->Add(s); // 輸出s字串
}

[/code]

上面是我的程式碼,
輸出的是這樣的數據
s = 7E 42 06 01 06 FF FF FF FF 06 7D 5D 0A 67 0E 4F 09 37

我想要取出紅色的字串 0A 67 0E 4F 09 37 做諸存並個別做判斷。
如:儲存a1[]=0A
儲存a2[] =67 等等
紅色部份的字串是動態的,從00 ~ FF 做動態的變動。

請問我要如何儲存,然後做判斷,並顯示出適當的信息呢?
因為剛接觸c builder ,所以請各位高手,指點一下吧。感謝
taishyang
站務副站長


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-09-18 12:36:40 IP:118.169.xxx.xxx 訂閱
可以利用TStringList的CommaText
ex.
AnsiString s = "7E 42 06 01 06 FF FF FF FF 06 7D 5D 0A 67 0E 4F 09 37";
TStringList *sl = new TStringList;
sl->CommaText = s;
for (int i=0; i < sl->Count; i ){
Memo1->Lines->Add(sl->Strings[i]);
}
delete sl;
編輯記錄
taishyang 重新編輯於 2008-09-18 12:37:14, 註解 無‧
messguy
一般會員


發表:1
回覆:2
積分:0
註冊:2008-09-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-09-18 22:32:30 IP:203.68.xxx.xxx 訂閱


我的數據是一直持續接收到。
非常感謝副站長的指導,目前已經可以把所有字串分開,我有個問題想請問一下。

Memo1->Lines->Add(sl->Strings[i]);

這行語法是所有字串都會儲到S1裡面去。
目前我想個別判斷上面用框線框住的字串。

如:0A 的位址是 14 嗎?
如果我將程式碼改成這樣:
Memo1->Lines->Add(sl->Strings[14]);
是不是s1裡面的值只有儲存 0A這個值。

我再用同樣的方法,用S2 來存 6A ,如法泡制,是不是應該就可以得到我想要得的結果了。

再請教一個問題,0A 這樣的值我要怎麼判斷,因為沒有用過,如:我想在 00 ~ 0A 的範圍之內,顯示,「向右轉】,是用位運算符號嗎?還是用關係運算符就可以了。因為沒有處理過這樣的字串,可以說一下觀念之類的嗎?或有參考的地方。 謝謝。
編輯記錄
messguy 重新編輯於 2008-09-18 23:04:46, 註解 無‧
taishyang
站務副站長


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-09-19 09:54:57 IP:118.169.xxx.xxx 訂閱
Memo1->Lines->Add(sl->Strings[i]);
這行語法是所有字串都會儲到S1裡面去。
這行是讓Memo1顯示sl->Strings[i]的內容


目前我想個別判斷上面用框線框住的字串。
如:0A 的位址是 14 嗎?
如果我將程式碼改成這樣:
Memo1->Lines->Add(sl->Strings[14]);
是不是s1裡面的值只有儲存 0A這個值。
我再用同樣的方法,用S2 來存 6A ,如法泡制,是不是應該就可以得到我想要得的結果了。
自行試試看就知道了

再請教一個問題,0A 這樣的值我要怎麼判斷,因為沒有用過,如:我想在 00 ~ 0A 的範圍之內,顯示,「向右轉】,是用位運算符號嗎?
還是用關係運算符就可以了。因為沒有處理過這樣的字串,可以說一下觀念之類的嗎?或有參考的地方。 謝謝。
如果是有範圍的限制,轉回數字即可判斷
ex
BYTEval = StrToInt("0x" sl->Strings[14]);
if (val < 0x0A){
XXX
}




messguy
一般會員


發表:1
回覆:2
積分:0
註冊:2008-09-18

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-09-22 23:43:56 IP:203.68.xxx.xxx 訂閱
想再請教一下,如上是0A 兩個字元為分割,分別存到S1 裡,如果我是想要0A 02 四個字元,存到s1裡去,可以用什麼方法嗎?也就是兩組字才做一個comma text,不知是用什麼方法嗎?

如果我想判斷0.1秒之間數據的差值,用timer是什麼方法?就是說我5秒前的資料還是有存在 和5秒後出現的數據去做比對,不知道有相關的方法嗎?謝謝

系統時間:2024-03-29 16:59:51
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!