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

有否人會用DELPHI 透過rs232 接收16進位字元的資料

尚未結案
cohost
一般會員


發表:2
回覆:6
積分:1
註冊:2005-08-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-25 17:10:13 IP:139.223.xxx.xxx 未訂閱
我在寫一支delphi程式, 遇到了一個讀取IC卡的問題,因是16進位的卡機,我不知在delphi如何讀出來, 及在字元的宣告部份如何處理,所附的圖是一個由vb所寫的測試程式, 我想知要如何能由delphi得到這串宇元
wyndog
資深會員


發表:7
回覆:362
積分:348
註冊:2004-10-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-25 17:58:12 IP:60.248.xxx.xxx 未訂閱
沒看到圖... 不過,這不重要.... IC卡有一個 PCSC 標準,使用 PCSC 就可以直接讀取 IC卡 完全不需要理會其介面為 RS232 還是 USB 不過,有個大前提... 就是它得有 PCSC Driver 才行....
cohost
一般會員


發表:2
回覆:6
積分:1
註冊:2005-08-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-25 22:45:52 IP:220.229.xxx.xxx 未訂閱
這ic卡, 應該不用driver, 我有利用delphi的rs232的原件寫了接收程式, 但所看到的碼, 不像barcode看到的10進位字元, 可以直接秀出來, 應是類unicode, or ascii之類的16進位的東西, 有人建議我用 陣列去存及換算, 但在型態上,pchar,integer,string,char等的型態,不知要如何去轉換. delphi 好像也只有 inttohex 而沒有hextoint的東東
cohost
一般會員


發表:2
回覆:6
積分:1
註冊:2005-08-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-26 02:25:52 IP:220.229.xxx.xxx 未訂閱
http://www.nahua.com.tw/download/rs232/ 在這個用vb寫出的測試程式, 可以看到ic卡所讀出的 16進位碼 第一張卡, 3 66 69 F2 F1 C 0 0 第二張卡, 3 6 3D F3 F1 39 0 0 而我所寫的delphi 讀出的顯示出為 一( fi襙)(DEBUG (#3'fi襙'#$C)) 二( =鵨9) (DEBUG (#3#6'=鵨9')) 而 debug 出的 ascii 一(#3 f i 空 空 #$c 空 空) 二(#3 #6 3d 空 空 9 空 空) 我所寫的程式如下 procedure TForm1.CommPortDriverReceivePacket(Sender: TObject; Packet: Pointer; DataSize: Cardinal); var sStr, sStr2, sStr3: string; pStr: pchar; bUsed : Boolean; iCount : integer; begin bUsed:=false; if DataSize > 0 then begin sStr := ''; pStr := Packet; edit1.text := pStr; edit2.text := pStr^; sStr2 :=edit2.text; if sStr2=#1 then edit2.text := '#1'; if sStr2=#2 then edit2.text := '#2'; if sStr2=#3 then edit2.text := '#3'; // #3 if sStr2=#4 then edit2.text := '#4'; if sStr2=#5 then edit2.text := '#5'; if sStr2=#6 then edit2.text := '#6'; if sStr2=#7 then edit2.text := '#7'; if sStr2=#8 then edit2.text := '#8'; if sStr2=#9 then edit2.text := '#9'; dec(DataSize); inc(pStr); edit3.text := pStr^; iArray[1]:= pStr^; sStr2 :=edit3.text; if sStr2=#1 then edit3.text := '#1'; if sStr2=#2 then edit3.text := '#2'; if sStr2=#3 then edit3.text := '#3'; if sStr2=#4 then edit3.text := '#4'; if sStr2=#5 then edit3.text := '#5'; if sStr2=#6 then edit3.text := '#6'; if sStr2=#7 then edit3.text := '#7'; if sStr2=#8 then edit3.text := '#8'; if sStr2=#9 then edit3.text := '#9'; if sStr2=f then edit3.text := 'f'; //F dec(DataSize); inc(pStr); . . . end 還盼請各位高手請教
cohost
一般會員


發表:2
回覆:6
積分:1
註冊:2005-08-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-26 10:44:10 IP:139.223.xxx.xxx 未訂閱
我找到了 版主所寫的一份 function CRC(Code: string): Byte; var i: Integer; b: Byte; begin Result := $00; for i := 1 to Length(Code) do Result := Result xor Byte(Code[i]); // 或 Result := Result and Byte(Code[i]); end; 透過這 function 轉換所傳入的字元 就自動轉成10進位的整數了 還是很感謝 reptile 兄的幫忙
系統時間:2024-04-18 20:31:15
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!