最后的55分:关于16进制,和字符串的问题!(50分)

  • 主题发起人 主题发起人 detail
  • 开始时间 开始时间
D

detail

Unregistered / Unconfirmed
GUEST, unregistred user!
现有一串口通讯程序(led程序),控制单片机显示的问题,要求数据块起始标志为0CH,41H,
42H,43H,44H,45H我先有一程序如下:
var
k,s:string;
i,j:boolean;
d:integer;
begin
k:=inttostr($0c)+intostr($41)+......inttostr($45);
s:='任意的长度为36的汉字';
i:=vacomm1.writetext(k);
if not i then
exit;
else
begin
for d:=0 to 35 do
begin
vacomm1.writetext(s);
i++;
end;
end;
end.
不知道前面的传递起始位置的语句是否正确?我在led显示屏上用该程序不能显示信息。
另外,
我用opendialog控件来打开一个文本文件。程序如下:
var
namefile:string;
begin
opendialog1.fliter:='文本文件(*.txt)';
namefile:=opendialog1.filename;
opendialog1.execute
if namefile<>'' then
begin
memo1.lines.loadformfile(namefile);
end
else
begin
showmessage('请选择文件');
end;
end;
不知道为什么程序运行后,第一次单击打开文件时,选择一txt文件后,总是提示请选择文件
,再重新选择一次后,不推出程序,就一切正常了,不知是什么原因引起的。
望解答!
多谢!
 
namefile应在opendialog1.execute后赋值。
 
把十进制的数值转成十六进制的用inttohex函数,返回值是字符串来的。
反过来,要把十六进制值转成十进制的话,可以这样:strtoint('$'+你的十六进制值)
(我昨天才问过这个转换的问题)
你的第二个问题:我同意SNAKE
 
多谢回答,但是还有一点小问题
如果inttohex返回值是string的话,那么是不是意味16进制可以按字符串发送?
如果是的话,那我上面发送的程序有问题么?用的是asyn32的控件,我发送的
起始数据后面的字符串,不能在led显示屏上显示。还有一个小问题(我没分了:p
所以在这问了)若字符串是全角,半角混杂的,既有中文也有英文的话,如何判断和发送?
考虑到单片机和计算机的速度差异,单片机的速度可能不够。会否产生丢失字符?
判断除了用isbdcsleadbyte()函数外,还有何好的方法?
 
如果发送一个16进制值的话,应该是按字符串发送,(16进制值里包含了字符)
中英文字符混杂的问题,目前我所知的也只有这种办法。
至于你的其它问题,很抱歉,我比你更不清楚:)
 
后退
顶部