mscomm接收大於char(128) 會出現問題 |
|
joycat
一般會員 發表:4 回覆:6 積分:2 註冊:2004-02-23 發送簡訊給我 |
小弟在BCB底下 ,嘗試使用OleVariant 來接資料 (MSComm1->Input 在BCB底下的資料型態是OleVariant ) 但是還是沒辦法克服問題... 下列兩狀況 都是 發送端 發送 AA 01 01 31 狀況1: 設定BINARY接收: MSComm1->InputMode=1; MSComm1->ParityReplace=""; 收到的 資料 會是 '\x01\x01' 資料 好像被 拋掉了 狀況2: 設定String 接收: MSComm1->InputMode=0; MSComm1->ParityReplace="?"; 收到的 資料 會是 '?\x011' <== 用HEX 看 是 "63 63 63 01 31" 其中 char 大於128的部分 會被replace掉 如果 MSComm1->ParityReplace=""; 則 仍然不會 收到 正確的資料 [code] void __fastcall TForm1::MSComm1Comm(TObject *Sender) { int i; char char_tmp; rec_str=""; int BfCount,rbLen ; OleVariant varRxBuff; BfCount= MSComm1->InBufferCount ; if(MSComm1->InBufferCount>0) { varRxBuff=MSComm1->Input; // 用BCB 去看內容 已經是 少了些東西了 rec_buff=varRxBuff.AsType(varString); rbLen= rec_buff.Length(); for(i=0; i < rec_buff.Length() 1 ;i ){ char_tmp = *(rec_buff.SubString(i,1).c_str()) ; rec_str =rec_str "[" IntToStr(char_tmp) " " int(char_tmp) " " IntToHex(int(char_tmp),2) "] " ; } RichEdit1->Lines->Add(DateTimeToStr(Now()) " HEX:" rec_str ); } } [/code] |
jcjroc
高階會員 發表:21 回覆:279 積分:115 註冊:2002-09-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |