解释一下这些DELPHI代码.

procedureTForm1.SendHex(S:String);vars2:string;buf1:array[0..50000]ofchar;i:integer;b... procedure TForm1.SendHex(S: String);
var
s2:string;
buf1:array[0..50000] of char;
i:integer;
begin
s2:='';
for i:=1 to length(s) do
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
begin
s2:=s2+copy(s,i,1);
end;
end;
for i:=0 to (length(s2) div 2-1) do
buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));
Comm1.WriteCommData(buf1,(length(s2) div 2));
end;

请详细解释,还有追加分.
展开
 我来答
紫金玄铁
2006-08-04 · TA获得超过792个赞
知道答主
回答量:330
采纳率:0%
帮助的人:0
展开全部
知识准备:
1、Copy函数:将源字符串(S)从指定下标(Index)处开始,拷贝长度为Count的子串,并返回该子串。
function Copy(S; Index, Count: Integer): string;
function Copy(S; Index, Count: Integer): array;
举个例子说吧:S:='abcdefg'; sR:=Copy(S,2,3) 那sR得到的值为——sR:='bcd'不要困惑,delphi字符串下标是从1开始的,C/C++是从0开始的。
2、delphi里的十六进制数表示:
如:0F800H,delphi里表示为$F800; C/C++里表示为0xF800.
3、Comm1.WriteCommData(buff,length);
这是从串口发送数据的函数。(你用到了第三方包中提供的串口操作包)
这个函数是讲,从串口发送buff从头算长度为length个字节。
-----------------------------------------------------
for i:=1 to length(s) do //length(s),得到S的长度
begin
if ((copy(s,i,1)>='0') and (copy(s,i,1)<='9'))or((copy(s,i,1)>='a') and (copy(s,i,1)<='f'))
or((copy(s,i,1)>='A') and (copy(s,i,1)<='F')) then
//S[i]是否为十六进制数。0~f,即0~9,a~f。()其实我认为,也应该把大写字母A~F考虑进去。
begin
s2:=s2+copy(s,i,1);//将符合十六进制规范的表示存入S2
end;
end;
上面这段代码,是从S中过滤掉了那些不属于十六进制规范的表示。
如:S为'8f9d04g5dh',经过滤就得到了'8f9d045d'(g、h被过滤)
----------------------------------------------------------
for i:=0 to (length(s2) div 2-1) do
buf1[i]:=char(strtoint('$'+copy(s2,i*2+1,2)));
显然,每两个十六进制数为一个字节,如$8f为一个字节;$8为4bit;$ffff为一个字,$ffffffff为一个双字,即32位.
在串口传输时,是按字节来传的,所以要除2,因为i从0开始,所以除2减1。
上面这部份代即将过滤好的十六进制字符串按字节转换成数值存入buf1。
如:S2:='8f9d045d',buf1[0]:=$8f,buf1[1]:=$9d,buf1[2]:=$04,
buf1[3]:=$5d.
-------------------------------------------------------
Comm1.WriteCommData(buf1,(length(s2) div 2));
从串口发出去了~~~
-------------------------------------------------------
不知道我有没有说清楚,希望楼主可以理解!
AiPPT
2024-09-19 广告
随着AI技术的飞速发展,如今市面上涌现了许多实用易操作的AI生成工具1、简介:AiPPT: 这款AI工具智能理解用户输入的主题,提供“AI智能生成”和“导入本地大纲”的选项,生成的PPT内容丰富多样,可自由编辑和添加元素,图表类型包括柱状图... 点击进入详情页
本回答由AiPPT提供
百度网友d1dcbf8
2006-08-04 · TA获得超过1228个赞
知道小有建树答主
回答量:767
采纳率:0%
帮助的人:670万
展开全部
输出字符串中符合16位进制的字符.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式