请教各位 mscomm 16进制发送问题(50分)

  • 主题发起人 主题发起人 hangyang
  • 开始时间 开始时间
H

hangyang

Unregistered / Unconfirmed
GUEST, unregistred user!
我用mscomm 发这样的字符串
s:='FF55AA02';
for i:=0 to (length(s) div 2)-1do
begin
temp:=temp+chr(strtoint('$'+copy(s,i*2+1,2)));//十六进制发送;
end;
mscomm.output:=temp;
在串口调试助手里看到的却是:FF 55 3F
如果是s:='FF55AA'
收到的却是:FF 55 00
这是怎么回事啊? 这样解决?(分不多了哈)
 
貌似 Temp 没有初始化
此外,这个程序极不优化,是否应该这样更好一些
function HexCharToInt(ch: Char): Integer;
begin
case ch of
'0'..'9': Result:= Byte(Ch) - 48;
'A'..'F': Result:= Byte(Ch) - 65;
'a'..'f': Result:= Byte(Ch) - 97;
else
Result:= 0;
end;
end;

procedure SendData(const S: String);
var
I: Integer;
Temp: String;
begin
SetLength(Temp, Length(S) div 2);
for I:= 1 to Length(Temp)do
begin
Temp:= Chr((HexCharToInt(S[I*2]-1) shl 4) + HexCharToInt(S[I*2]));
end;
MsComm.Output:= Temp;
end;
 
谢谢您 我的问题已经解决了
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
722
import
I
I
回复
0
查看
816
import
I
后退
顶部