当前位置:主页>销售管理软件> 列表

请问有什麽方法把字符串的每个字符转成其对应的ASCII 找数宝在线进销存

记账软件版1楼: 我现在想实现计算机对变频器的控制.比如我发指令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;

2楼: 说得简单点吧,我不懂变频器,能否不涉及硬盘问题,把你的需求提出来? 如进销存使用方法

3楼: 就是把字符串00EE11388EF中每个字符转成其对应的ASCII值后相加求和

4楼: 写个对应关系表不就ok了

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

6楼: 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[i]);
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.

记账软件版7楼: 请问你这段程序的问题所在是什么?你没说呀

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

9楼: 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[i]);
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.

小菜

10楼: 老板,结账

11楼: 多人接受答案了。

12楼: 我在调试的时候, a1:=edit1.text;句出现Unit1.pas(46): Illegal character in input file: '' '' ($A1A1)不成功是什魔原因,调试没通过.谢谢! 如数宝在线进销存

13楼: 不应有错
不知是否你的源码中有不可见字符的影响

记账软件版14楼: 搞定了! OK! Thank you!

15楼: 请在帮一个忙

16楼: 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.

17楼: 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

18楼: 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

19楼: 搞懂了,再加一个变量就OK了.谢了.