delphi中如何将数据以16进制发送 ( 积分: 100 )

  • 主题发起人 主题发起人 zhudongpo
  • 开始时间 开始时间
Z

zhudongpo

Unregistered / Unconfirmed
GUEST, unregistred user!
在delphi中要将数据已十六进制形式发送出去,我使用的是spcomm控件
网上看到的都是下面这种方式给的例子
sbuf[1]:=byte($ f0); //帧头
sbuf[2]:=byte($ 01); //命令号
sbuf[3]:=byte($ ff);
sbuf[4]:=byte($ ff);
sbuf[5]:=byte($ 01);
sbuf[6]:=byte($ f0); //帧尾
可是我的数据是变量呀,如8B8A,DF4等(数据是1或2byte),不可能向上那样一一填写进去。还从网上同行处得到sendstr:=chr($FA)+chr($FB)+chr($80)+data
其中data为我要发送的数据,可是以16进制接收的data不正确,请问data该如何
处理使接收的数据正确,或者该如何发送 。谢谢。
 
在delphi中要将数据已十六进制形式发送出去,我使用的是spcomm控件
网上看到的都是下面这种方式给的例子
sbuf[1]:=byte($ f0); //帧头
sbuf[2]:=byte($ 01); //命令号
sbuf[3]:=byte($ ff);
sbuf[4]:=byte($ ff);
sbuf[5]:=byte($ 01);
sbuf[6]:=byte($ f0); //帧尾
可是我的数据是变量呀,如8B8A,DF4等(数据是1或2byte),不可能向上那样一一填写进去。还从网上同行处得到sendstr:=chr($FA)+chr($FB)+chr($80)+data
其中data为我要发送的数据,可是以16进制接收的data不正确,请问data该如何
处理使接收的数据正确,或者该如何发送 。谢谢。
 
你用CHAR发出来它也是十六进制呀,
for i:=0to 10 do buf:=#$00;
addr:=0;
buf[0]:=Char(addr);
buf[1]:=str;
buf[8]:=#$dd;
buf[9]:=#$30;
buf[10]:=#$40;
for i:=11 to 83 do
begin

if StrLen(tp)<>0 then
begin
buf:=TP^;
Inc(tp)
end
 
我也用的是SPCOMM
电脑都是已二进制处理数据的
不论你发什么都是以二进制方式发出的
所以不要想什么进制
个人认为以字符方式发是最好的
例如:
#13和#$0D都可以发
#$20和chr(' ')也一样呀
你也可以这样
tp:=pchar(edit1.text);
comm1.WriteCommData(tp,strlen(tp));
 
楼主理解错误 数据在传输过程中都是二进制的 只是你读写的时候可以按十六进制显示而已
所以你只要声明一个缓冲,
buf: array [1..1024] of Char;
对于缓冲的每一个字节,你把需要的值CopyMemory()进去即可
 
var
abuf:array[1..n] of char;
i:integer;
begin
for i:=low(aBuf) to high(aBuf) do
aBuf:=....
end;
 
串口助手接受设置为16进制
帧头为FAFB 命令类型为80H
例如发送FAFB808D8A 如何发送?(qet006, 以字符方式发是最好的)接收的就是乱麻了
现在要做的是接收端是16进制接收,请问发送端该如何处理。
 
各位给看看了,多谢了
 
用$发的就是16的
不过也要按照16的读
 
可爱小猪,
发送 sendstr:=chr($FA)+chr($FB)+chr($80)+data
接收肯定是16进制的了(用的是串口调测助手),只是FAFB80接收是正确的,data数据不正确,$怎么加(data:string),谢谢。data 是 8B8A,DF4,FA....等(数据是1或2byte),请问
可爱小猪,我该如何处理。谢谢了
 
buf[1] := $FA;
buf[2] := $FB;
buf[3] := $B8;
....
 
已经在csdn得到答案,谢谢各位
如果8D8A
data[1]是8
data[2]是D
data[3]是8
data[4]是A
应该是这样
sendstr:=chr($FA)+chr($FB)+chr($80)+chr(strtoint('$'+data[1]+data[2]))...
 
后退
顶部