字符串如何转变成byte类型(串口通讯,spcomm控件)(100分)(100分)

  • 主题发起人 主题发起人 yansh
  • 开始时间 开始时间
Y

yansh

Unregistered / Unconfirmed
GUEST, unregistred user!
我编写一个串口通讯测试软件,我该怎样将edit的字符串变成byte类型?
代码如下:
控件使用SPcomm

procedure TForm1.sendClick(Sender: TObject);
var
s1,s2,s3,s4:string;
ss:String;
begin
ss:=inttohex(strtoint(edit1.Text),8);
//问题在这里该怎样转换??
//如输入12345678 十六进制码为BC 61 4E
//我需要发送 00 BC 61 4E
s1:=copy(ss,1,2);
s2:=copy(ss,3,2);
s3:=copy(ss,5,2);
s4:=copy(ss,7,2);
//*****************
SendBuffer[0]:=s1;
SendBuffer[1]:=s2;
SendBuffer[2]:=s3;
SendBuffer[3]:=s4;
Comm1.WriteCommData(pchar(sendbuffer)^, 4 );

end;
或者有更好的方法

 
如果你只是要发送ss字符串的话:
SendBuffer[0]:= PChar(SS)[0];
SendBuffer[1]:= PChar(SS)[1];
SendBuffer[2]:= PChar(SS)[2];
SendBuffer[3]:= PChar(SS)[3];

btw: 我看你上面写的代码好象是想把12345678这个数字发出去?
 
好象你的程序和你的题目不符呀,
顺便问一句, byte 是不是 -128..127?
本来 string 中每个字符就是一个字节,转换后就不一样了。
要不把字符串直接传过去,在那边化为十六进制?
 
用类型强制转换,比如:
byte(edit1.text[1])
byte(edit1.text[2])
 
//如输入12345678 十六进制码为BC 61 4E
//我需要发送 00 BC 61 4E
00 BC 61 4E 是数字还是字符串(即"00 BC 61 4E")?

如果是数字:
var
i:integer

i:=strtoint(edit1.Text)

Comm1.WriteCommData(pchar(@i)^, 4 );

 
另外delphi中使用指针就是没有c语言界限清楚,上面要不要 ^ 号不知道
 
我来了:此函数是了开发102卡上要用来转化后发送到单片机的而开发,(一个字符串转换函数)。思想是这样你可以针对性修改。
已成功运用在大系统中,如有用请广为传播。
//此函数是为转化含字母的字符串为整形
Function strofHextoDec (str: string):integer;
var
i:integer;
j,j1,j2: byte;
Temp: string;
s: Pointer;
char26:set of 'A'..'Z';
begin
//把str赋为指针类 Temp[]为从字符串中转化(取)成单个字符
s:=StrAlloc(8);
temp:=stringofchar(' ',2);
strpcopy(s,uppercase(str));
move( s^, pchar(temp)^, 2 );
char26:=['A','B','C','D','E','F'];
for i:=0 to 38 do begin //length(str)-1 //39个字节
//Temp[]内是否含26个字母 ,减55表示从字母的ASCII中转化为10进制数
//如:‘A’ASCII为‘65’,16进制为‘10’,65-55=10
//如:‘9’ASCII为‘57’,16进制为‘9’,57-48=9
if ((temp[i*2+1] in char26))then
begin
j1:=ord(temp[i*2+1])-55;
// j2:=ord(temp[i*2+2])-48;
end else j1:=ord(temp[i*2+1])-48;
//取出的两个字符后一个为字母时
if ((temp[i*2+2] in char26)) then
begin
// j1:=ord(temp[i*2+1])-48;
j2:=ord(temp[i*2+2])-55;
end else j2:=ord(temp[i*2+2])-48;
j:=Hextoint(j1*16+j2);
end;
result:=j;
end;
 
增加:for i:=0 to 38 是我要转化的字符数的一半。我直接copy我的程序,可能有些地方要改。你应该无问题吧。
 
多人接受答案了。
 
多谢各位,注:
procedure TForm1.sendClick(Sender: TObject);

var
Sendbuffer:array[0..256] of byte ;

s1,s2,s3,s4:string;
ss:String;
begin
ss:=inttohex(strtoint(edit1.Text),8);
//问题在这里该怎样转换??
//如输入12345678 十六进制码为BC 61 4E
//我需要发送 00 BC 61 4E
s1:=copy(ss,1,2);
s2:=copy(ss,3,2);
s3:=copy(ss,5,2);
s4:=copy(ss,7,2);
SendBuffer[0]:=byte(strtoint('$'+s1));
SendBuffer[1]:=byte(strtoint('$'+s2));
SendBuffer[2]:=byte(strtoint('$'+s3));
SendBuffer[3]:=byte(strtoint('$'+s4));
Comm1.WriteCommData(pchar(sendbuffer)^, 4 );

end;

搞定,正确答案给出,与诸君共勉!!

//*************************
 
后退
顶部