mscomm接收来的二进制数据,如何转换成十六进制并显示在edit中? (100分)

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

xgcs

Unregistered / Unconfirmed
GUEST, unregistred user!
如题.试了好多方法,总是类型不匹配...郁闷ing...
接受来得数据存在一个variant变量buffer中,我需要将其转换为十六进制文本..
delphi7中有bintohex函数,可是我怎么试也不能满足函数对参数类型的要求,总是说我给它的参数类型不匹配[:(!]高手救救小弟啊.在线等..............
 
怎么调用呢?
 
var
s:string;
a : array of byte;
i:integer;
begin
setlength(a,bufferlength);
move(^buffer,a,bufferlength);
for i:=1 to bufferlength do
s := s + inttohex(a,2)+' ';
edit1.text :=s;
end;
 
修改后的程序,第一次启动能接受,多发几次数据就出现一下错误(弹出一错误提示框):
project project1.exe raised exception class EAccessViolation with message
'Access violation at address 00464B1C' in module 'project1.exe'.Read of address 00002012'.Process stopped. Use Step or Run to continue.
另外,move(^buffer,a,bufferlength);好像有错误,这个符号"^"好像不认,我把^去掉了,即
move(buffer,a,length(buffer))
[?]
还有,接收成功的时候,接收数据也不正确.是不是我得发送程序不正确?(即在一个edit输入十六进制文本,转换成二进制data发送)这是我自己写的发送程序,烦请高手指教哈:
s1:=edit1.Text;//edit1中输入十六进制的文本.
for i:=1 to length(s1) do
mscomm1.Output:=chr(strtoint('$'+s1));//将每个字符依次转换为data发送.
初学delphi,问题低级的很,望高手不吝指教啊.另,china_delphi兄的100分已经送上.
 
还是在线等.
 
对不起是我写错了,用该是:
move(buffer^,a,bufferlength);
这个‘^’号应在buffer后面。这样应该没问题,我在线等你的好消息。
 
改了,还有错误:pointer type required[?]
怎么回事啊.
还有我的发送程序你看了么,可否?
多谢china_delphi兄!
 
另外,我新开了一个帖子,可以到哪里去看看,还有100分送.[:D]
http://www.delphibbs.com/delphibbs/dispq.asp?lid=2249675
 
后退
顶部