刚刚学D,做了个简单的上位机,现在有个问题,数据接收来时都是ASCII码显示的,就像这样的3A 30 43 30 33 31 36 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30
开始:从机地址 功能代码 返回的字节个数 数据1 数据2
30 30 30 30 30 30 30 30 30 30 44 39 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 0D 0A
数据3 数据4 数据5 数据6 数据7 数据8 校验码 CR LF
现在想把上面的数据的某个数据比如数据4截取出来显示在Edit框中,以十进制的形式显示数据,该如何实现呢,望大家帮帮忙呀,小弟在此谢了!!
开始:从机地址 功能代码 返回的字节个数 数据1 数据2
30 30 30 30 30 30 30 30 30 30 44 39 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 0D 0A
数据3 数据4 数据5 数据6 数据7 数据8 校验码 CR LF
现在想把上面的数据的某个数据比如数据4截取出来显示在Edit框中,以十进制的形式显示数据,该如何实现呢,望大家帮帮忙呀,小弟在此谢了!!
解决方案 »
- 如何将EDIT控件设置成LABEL控件一样,使其无法被选择,禁用焦点,禁用光标?
- 关于dbedit的使用
- 想用Indy IdHttp做一个自动登陆邮箱并发邮件的程序,要登陆的网站是SSL的,请大家来讨论?
- Listview中可以加入一列checkbox吗?谢谢!
- 哪会高手知道怎么通过ADOCONNECT删除ACCESS里的数据据表?急???????
- 如何隐藏主窗口?
- 关于SQL语句
- 控件数组问题--新手(伴水在吗)
- to cobi(我是小新,我只有5岁):怎么捕捉由maskedit控件由于用户输入不能通过检查的错误呢?
- 高分悬赏!(关于Delphi的自定义打印问题 高分悬赏!(后再加分)
- Delphi中使用TWebBrowser提交表单取不到跳转后页面的内容
- 请问在Delphi中,为什么点击stringgrid中的Button,它的click事件不被响应呢?
//字符串转换为十六进制字符串:例如‘ABCD’-> ‘41424344’*************************
//==============================================================================
function BinaryToHexStr(Str:string):string;
var i: integer;
begin
Result := ' ';
for i:=1 to Length(Str) do Result := Result + IntToHex(Ord(Str[i]),2);
end; //==============================================================================
//十六进制字符串转换为字符串:例如‘41424344’-> ‘ABCD’*************************
//==============================================================================
function HexStrToBinary(Str:string):string;
var i, Len: integer;
Point: Pointer;
begin
Len := Length(Str) div 2;
Point := AllocMem(Len + 1);//Len + 1是为nil结尾的标志空出一个字节
Pointer(Result) := Point;
for i:=0 to Len do Result[i]:= Chr(StrToint( '$ ' + Copy(Str, i*2-1, 2)));
ReallocMem(Point, Len + 1);
end;
Copy(s,开始位置,长度)
关键是你要知道数据4开始位置结束位置(或者长度)
转十进制:假如你截取到的数据是2A 3B,看你数据是否是低位在前,是就需要颠倒下(一般都需要,具体根据你自己的实际情况),
像这样转StrToInt('$3B2A'),不是的话就StrToInt('$2A3B'),就是字符表示前面加上$符号就可以转整数了,
SS:='30 30 30 30 30 30 30 30 30 30 44 39 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 32 0D 0A'拿这个来举例子copy(ss,25,4)就得到30 30 44 39了
begin
s1:=Copy(str,1,2);
k:=StrToInt('$'+s1);//控制器编号
s2:=Copy(str,3,2);//电压值 高字节
s3:=Copy(str,5,2);//电压值 低字节
i:=StrToInt('$'+s2)*256+strtoint('$'+s3);
dy:=(9.93*i)/1024;
s1:=FormatFloat('0.00',dy);
end;