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

資料短少的問題

尚未結案
properwu
一般會員


發表:17
回覆:21
積分:7
註冊:2003-03-14

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-07 16:51:44 IP:210.202.xxx.xxx 未訂閱
請教告位前輩 透過RS232傳輸 buff[1024]裡放了許多資料 佔很多字元 為何我寫入str1後 長度都只有30 資料少了很多 為什麼會這樣呢 我應該從哪方面去找問題(data type?..)呢 謝謝各位 
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-07 17:05:44 IP:211.75.xxx.xxx 未訂閱
引言: 請教告位前輩 透過RS232傳輸 buff[1024]裡放了許多資料 佔很多字元 為何我寫入str1後 長度都只有30 資料少了很多 為什麼會這樣呢 我應該從哪方面去找問題(data type?..)呢 謝謝各位 >< face="Verdana, Arial, Helvetica"> Is buff[30] == '\0' ?
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-07 17:06:35 IP:61.59.xxx.xxx 未訂閱
Hi properwu: 你可以先檢查從RS232收到的資料中, 有沒有含有0x00...因為一個String 的長度是計算到0x00為止, 就算是字串終結了, 先試試吧!我只想到這個可能!! -------------------------- ~天下本無事 庸人自擾之~
properwu
一般會員


發表:17
回覆:21
積分:7
註冊:2003-03-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-08 15:53:12 IP:210.202.xxx.xxx 未訂閱
感謝兩位的熱心 但還是有問題說 如果我不用字串來做 就用陣列來控制 但會出現 error message:Cannot convert 'char' to 'char' 請問這樣是什麼問題呀 程式如下:(目的為抓到陣列中 @,2,2,1 四個連續字元 作為程式告一段落的判斷 buff[1024]裡放了許多資料..) int j=0; if(buff[j]=="@") { if(buff[j 1]=="2" && buff[j 2]=="2" && buff[j 3]=="1") { ShowMessage("Get my char"); } else { j=j 1; } }
Windyboy
版主


發表:7
回覆:119
積分:210
註冊:2002-11-07

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-08 16:05:57 IP:61.59.xxx.xxx 未訂閱
Hi properwu: buff[j]應該是char唷... 所以你要做比較, 要跟'@'比較, 而不是"@"....再試試..加油.^^ -------------------------- ~天下本無事 庸人自擾之~
properwu
一般會員


發表:17
回覆:21
積分:7
註冊:2003-03-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-08 16:49:12 IP:210.67.xxx.xxx 未訂閱
感謝 Windyboy 前輩 這個char的問題ok了 不過因為陣列中的數值是由rs232傳入 並不是同時input 而是類似一秒傳幾個值寫入陣列 這樣我該如何 能從陣列中判斷出我要的值呢 用if迴圈好像不太適合 條件不對就不做 不能持續的判斷 while迴圈去判斷陣列的值又會發生錯誤 各位前輩 給個方向吧  
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-11 17:24:47 IP:211.75.xxx.xxx 未訂閱
引言: 感謝兩位的熱心 但還是有問題說 如果我不用字串來做 就用陣列來控制 但會出現 error message:Cannot convert 'char' to 'char' 請問這樣是什麼問題呀 程式如下:(目的為抓到陣列中 @,2,2,1 四個連續字元 作為程式告一段落的判斷 buff[1024]裡放了許多資料..) if(buff[j]=="@")
吐嘈一下, 照你的code來看, 我想Error Message 應該是: "Cannot convert 'char' to 'char *'" 才對...
miyu
中階會員


發表:13
回覆:96
積分:91
註冊:2003-05-01

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-08-11 17:31:33 IP:211.75.xxx.xxx 未訂閱
引言: 感謝 Windyboy 前輩 這個char的問題ok了 不過因為陣列中的數值是由rs232傳入 並不是同時input 而是類似一秒傳幾個值寫入陣列 這樣我該如何 能從陣列中判斷出我要的值呢 用if迴圈好像不太適合 條件不對就不做 不能持續的判斷 while迴圈去判斷陣列的值又會發生錯誤 各位前輩 給個方向吧 < face="Verdana, Arial, Helvetica"> 你要作什麼? 找一個pattern? 如果你可以固定接收一個完整的packet, 那可以考慮整筆資料收完以後再search. 不行的話, 那至少你應該知道這一次收進來的資料有多長吧, 就以那個長度為搜索範圍. 如果找到你要的pattern 或是 pattern 片斷, 就改變 state 去記錄..
properwu
一般會員


發表:17
回覆:21
積分:7
註冊:2003-03-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-08-15 16:40:01 IP:210.202.xxx.xxx 未訂閱
這是之前有一位前輩提供的方法 不過我有遇到一些問題 提出來跟大家討論一下 (1)what true? (2)作用為何? (3)無窮迴圈? 程式就一直run在這 謝謝大家.. void __fastcall TForm1::Button2Click(TObject *Sender) { char buff[1024]; DWORD nBytesRead,dwEvent,dwError,count; COMSTAT cs; char *p; count=0; p=&buff[0]; while(true) // (1)what true? { Application->HandleMessage(); // (2)作用為何? ClearCommError(hComm,&dwError,&cs); if(cs.cbInQue > 0) // (3)無窮迴圈? { ReadFile(hComm,p,1,&nBytesRead,NULL); count=count nBytesRead; p=p nBytesRead; } if(count>=1024) break; } }
系統時間:2024-06-29 5:03:11
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!