菜鸟使用mscomm控件向串口发送16进制数,怎样把edit1里的字符以16进制的形式向串口发送??我写的代码不对吗??? (69分)

  • 主题发起人 主题发起人 xiaoxiami0
  • 开始时间 开始时间
X

xiaoxiami0

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.FormCreate(Sender: TObject);
begin
Mscomm1.InBufferCount := 0
// 清空接收缓冲区
Mscomm1.InputLen := 0
// Input读取整个缓冲区内容
Mscomm1.RThreshold := 1
// 每次接收到字符即产生OnComm事件
end;

procedure TForm1.FormActivate(Sender: TObject);
begin
if mscomm1.portopen = false then
begin
Mscomm1.CommPort := 1;
Mscomm1.PortOpen := true
// 打开串口
Mscomm1.DTREnable := true
// 数据终端准备好
Mscomm1.RTSEnable := true
// 请求发送
end;
end;

//怎样把edit1里的字符以16进制的形式向串口发送??
procedure TForm1.Button1Click(Sender: TObject);
var
outTempS: variant;
begin
outTempS:='01030200001045be';
mscomm1.Output:=edit1.text;
end;
 
波特率好像你没有设置,看看波特率对不对?
 
我只想知道怎么把edit1里的字符以16进制的形式向串口发送??
 
EDIT1里的内容是字符还是数字?
 
为什么一定要16进制的,最好把原因讲明了这样也好做。
 
EDIT1里的内容是:01030200001045be
 
正确是这样
var
outTempS: array[0..2] of byte;
begin
outTempS[0]:=$01;
outTempS[1]:=$02;
outTempS[2]:=$03;
mscomm1.Output:=outTempS;
end;
 
TO:41426277
错!人家要的是把EDIT1里的东西换成16进制发送
 
写个转换函数,当然加上异常处理更好

Var
S:string;
Len:byte;
TempArr:array[0..127] of Byte;

Begin
S;=Edit1.text;
Len:=Length(S) div 2;
for i:=0 to Len do
TempArr:=strtoint('$'+copy(S,i*2+1,2));
end;
 
我同意,如果可以用非16进制的也可以自己写个字符转换函数。比如BASE64编码也行。
 
TO:jlyin
程序错误应该是:
var
i:integer;
S:string;
Len:byte;
T:array[0..127] of Byte;
R:array[0..127] of string;
begin
S:=Edit1.text;
Len:=Length(S);
for i:=0 to Len-1 do
begin
R:=inttohex(byte(s[i+1]),2);
end;
S:='';
for i:=0 to Len-1 do
begin
S:=S+R;
end;
edit2.text:=S;
end;
 
还是不对。
 
用 spcomm 控件,自动帮你转16进制了.
 
怎么会不对啊
我试过了可以的
 
S里的字串就是你要的16进制的了是ASCLL码值
 
菜鸟从网上下载了一个串口调试工具,我用好使,我在文本框里写上01030200001045be,并且在16进制发送上打勾,那个串口工具就可以把文本框里的数据以16进制的发了,我们怎么办不到呢?
 
晕,那是个控件吧。
用我写的这段代码可以实现任何字串转为16进制的功能的。
 
多人接受答案了。
 
后退
顶部