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

如何將一個string的變數轉成byte由rRS232送出

答題得分者是:h@visli
itsgero2798
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-28

發送簡訊給我
#1 引用回覆 回覆 發表時間:2008-03-30 15:13:05 IP:61.216.xxx.xxx 訂閱
請教一下,現已知將 指令FFh 07h F8h 以BYTE送出為  #$FF+#$07+#$F8
若指令為一個 STRING的變數,如何轉成BYTE送出,在前面加上#$不對
要如何改才對呢


h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2008-03-30 23:40:45 IP:116.76.xxx.xxx 訂閱
var
CmdStr: string;
begin
//....
CmdStr := #$FF#$07#$F8;
SendCmd(CmdStr);
//....
end;


===================引 用 itsgero2798 文 章===================
請教一下,現已知將 指令FFh 07h F8h 以BYTE送出為 #$FF #$07 #$F8
若指令為一個 STRING的變數,如何轉成BYTE送出,在前面加上#$不對
要如何改才對呢

------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
itsgero2798
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2008-04-01 11:19:35 IP:61.230.xxx.xxx 訂閱
抱歉,我問的不夠清楚,我要的是

var
CmdStr: string;
begin
//....
SendCmd( #$ CmdStr ); //這樣好像不行
//....
end;
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2008-04-01 18:42:17 IP:218.18.xxx.xxx 訂閱
很抱谦,你的问题描述还是不清楚,你要输入什么输出什么呢?
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
itsgero2798
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2008-04-01 23:56:58 IP:61.216.xxx.xxx 訂閱
其實我輸入是一段字串,先轉成ASCII 再作 XOR計算出 CHECKSUM再輸出,
所以每輸入不同的的字串會計算出不同的CHECKSUM,計算出來的CHECKSUM再轉成
ASCII CODE以byte輸出,如下,計算出來為string 如何以byte由rs232送出

function checksum( s : string ) : String;
var
i, j, xorValue : Integer;
HexArray : array[1..250] of Integer;
begin
xorValue := 0;
i := Length(s);
for j := 1 to i do
begin
HexArray[j] := Ord( Copy(s, j, 1)[1] );
end;
for j := 1 to i do
begin
xorValue := XorValue Xor HexArray[j] ;
end;
result := InttoHex( XorValue, 2);
end;
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2008-04-02 11:56:32 IP:218.18.xxx.xxx 訂閱
你把你的RS232发送接口函数贴出来吧。

另外你的代码可以优化如下:

[code delphi]
function checksum( s : string ) : String;
var
i, xorValue : Integer;
begin
xorValue := 0;
for i := 1 to Length(s) do
xorValue := xorValue xor Byte(s[i]);
Result := IntToHex(xorValue, 2);
end;

[/code]
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
itsgero2798
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2008-04-02 23:15:57 IP:61.216.xxx.xxx 訂閱
謝謝大大指教,我使用的發送的function如下

procedure TForm1.Send( s : string );
var
lrc:LongWord;
begin
if (hComm=0) then exit; //檢查Handle值
WriteFile(hComm,PChar( s )^,Length( s ), lrc, nil); // 送出資料
end;
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2008-04-03 08:58:28 IP:219.133.xxx.xxx 訂閱
你可以直接以String类型发送,如果一定要一位一位的转成byte类型来发送,就直接用byte(s[i]),String串中的每一位Char你都可以直接转成byte类型的。

===================引 用 itsgero2798 文 章===================
謝謝大大指教,我使用的發送的function如下

procedure TForm1.Send( s : string );
var
lrc:LongWord;
begin
if (hComm=0) then exit; //檢查Handle值
WriteFile(hComm,PChar( s )^,Length( s ), lrc, nil); // 送出資料
end;
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
itsgero2798
一般會員


發表:17
回覆:17
積分:6
註冊:2007-09-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-04-03 15:21:08 IP:218.167.xxx.xxx 訂閱
謝謝h@visli大大
系統時間:2024-04-17 6:51:05
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!