请问有什麽方法把字符串的每个字符转成其对应的ASCII(100分)

  • 主题发起人 主题发起人 junye--li
  • 开始时间 开始时间
J

junye--li

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在想实现计算机对变频器的控制.比如我发指令0100EE1388EF(代表频率50HZ)给串口控件MSCOMM的Output属性,如:

writestr:=00EE11388EF;
mscommain.Output:=writestr;

我还想一次再发指令0100ED1218EC(代表时间100秒)给变频器,有何办法?

当其属性portopen为true时打开串口,发送一个指令mscommain.Output:=writestr;写入变频器,还想发下一个指令控制其运转时间.能否不用使其portopen属性为false后再打开串口发下一指令.

即让两条指令一次发出,而不用关闭串口.谢谢各位的帮助.

在主窗体上的edit1.text中写入频率,转化后成十六进制为1388,EF是00EE11388的ASCII的相加后的和的最后两位.
  
  请问有什麽方法把字符串的每个字符转成其对应的ASCII,再求和? 多谢!

以下是我写的部分程序存在问题,恳请各位参与,帮助,指正.
  a1:=edit1.text;
a2:=inttohex(strtoint(edit1.text)*100,4) ;
s:='00EE1'+a2;
temp1:=sum(s);
if length(temp1)=3 then
writestr:=s+copy(temp1,2,2)
mscommain.Output:=writestr;
 
说得简单点吧,我不懂变频器,能否不涉及硬盘问题,把你的需求提出来?
 
就是把字符串00EE11388EF中每个字符转成其对应的ASCII值后相加求和
 
写个对应关系表不就ok了
 
function StringAsciiAdd(S: string): integer;
var
i: integer;
begin
result:= 0;
for i:= 1 to length(S) do
result:= result + Ord(S);
end;
 
xfz8124这位大哥谢谢你,我还想检测一下.我下面的程序有问题!帮我再解决一下,我把分数的95%送给你!
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
procedure Button1Click(Sender: TObject);

private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
function StringAsciiAdd(S: string): integer;
var
i: integer;
begin
result:= 0;
for i:= 1 to length(S) do
result:= result + Ord(S);
end;


procedure TForm1.Button1Click(Sender: TObject);
var
a1,a2,s:string;
temp1:integer;
begin
  a1:=edit1.text;
a2:=inttohex(strtoint(edit1.text)*100,4) ;
s:='00EE1'+a2;
temp1:=StringAsciiAdd(s);
edit2.Text:=inttostr(temp1);
end;

end.
 
请问你这段程序的问题所在是什么?你没说呀
 
出现的问题是我想在edi1.text中输入50,这条语句转a2:=inttohex(strtoint(edit1.text)*100,4) ;使其值转为1388(十六进制),通过temp1:=StringAsciiAdd(s);求出其对应的ASCII值的和. edit2.Text:=inttostr(temp1);在edit2.Text中显示.我想验证其正确性.现在以上的程序出现错误,我想请你给予帮助.谢谢.
 
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
btn1: TButton;
Edit1: TEdit;
Edit2: TEdit;
procedure btn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation


{$R *.dfm}

function StringAsciiAdd(S: string): integer;
var
i: integer;
begin
result:= 0;
for i:= 1 to length(S) do
result:= result + Ord(S);
end;

procedure TForm1.btn1Click(Sender: TObject);
var
a1,a2,s:string;
temp1:integer;
begin
Edit1.Text:= '50';

  a1:=edit1.text;
a2:=inttohex(strtoint(edit1.text)*100,4) ;
s:='00EE1'+a2;
temp1:=StringAsciiAdd(s);

//注意下面这句的写法,不是IntToStr,是InttoHex,调试的时候会显示01EF
edit2.Text:=IntToHex(temp1, 4);
end;

end.

小菜
 
老板,结账
 
多人接受答案了。
 
我在调试的时候, a1:=edit1.text;句出现Unit1.pas(46): Illegal character in input file: ' ' ($A1A1)不成功是什魔原因,调试没通过.谢谢!
 
不应有错
不知是否你的源码中有不可见字符的影响
 
搞定了! OK! Thank you!
 
请在帮一个忙
 
procedure TForm1.btn1Click(Sender: TObject);
var
a1,a2,s:string;
temp1:integer;
begin
a1:=edit4.text;
a2:=inttohex(strtoint(edit4.text)*100,3) ;
s:='00EE1'+a2;
temp1:=StringAsciiAdd(s);
edit2.Text:=IntToHex(temp1, 3);
if length(inttostr(temp1))=3 then
writestr:=chr(5)+s+copy(inttostr(temp1),2,2)
else if length(inttostr(temp1))=2 then
writestr:=chr(5)+s+inttostr(temp1);
edit.Text:=writestr;
end;
为什麽程序运行EDIT3的结果是00EE11388,而不是500EE11388EF.
 
procedure TForm1.btn1Click(Sender: TObject);
var
a1,a2,s:string;
temp1:integer;
begin
a1:=edit1.text;
a2:=inttohex(strtoint(edit1.text)*100,3) ;
s:='00EE1'+a2;
temp1:=StringAsciiAdd(s);
edit2.Text:=IntToHex(temp1, 3);
if length(inttostr(temp1))=3 then
writestr:=chr(5)+s+copy(inttostr(temp1),2,2)
else if length(inttostr(temp1))=2 then
writestr:=chr(5)+s+inttostr(temp1);
edit3.Text:=writestr;
end;
为什麽程序运行EDIT3的结果是00EE11388,而不是500EE11388EF
 
procedure TForm1.btn1Click(Sender: TObject);
var
a1,a2,s:string;
temp1:integer;
begin
a1:=edit1.text;
a2:=inttohex(strtoint(edit1.text)*100,3) ;
s:='00EE1'+a2;
temp1:=StringAsciiAdd(s);
edit2.Text:=IntToHex(temp1, 3);
if length(inttostr(temp1))=3 then
writestr:=chr(5)+s+copy(inttostr(temp1),2,2)
else if length(inttostr(temp1))=2 then
writestr:=chr(5)+s+inttostr(temp1);
edit3.Text:=writestr;
end;
为什麽程序运行EDIT3的结果是00EE1138895,而不是500EE11388EF
 
搞懂了,再加一个变量就OK了.谢了.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
666
import
I
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
后退
顶部