现在需要把字符类型转换成16进制发送出去,不会啦,我用的是mscomm控件,谁能帮帮我啊,谢谢啦
我把你那个字符转16进制的验证了一下,不对劲呀,例如我写1,结果转成31了,这是1的ASCII码吧。可能是我没说明白,例如我想让下位机接收到10(0AH,下位机接收单元显示16进制,例如发送字符1后显示0031),我PC机该怎么发送才能让它收到对应的数据呢?书上说要把数据用Byte类型发送,我就编了一个,结果还是不可以,再帮我看看吧
procedure TForm1.Button3Click(Sender: TObject);
var
Sendvar:Variant;
Ch1,Ch2:Char;
Byte1,Byte2:Byte;
I:Integer;
begin
Sendvar:=VarArrayCreate([1,Length(edit1.Text) div 2],varByte);
Byte1:=0;
Byte2:=0;
for I:=1 to Length(edit1.Text) div 2 do
begin
Ch1:=edit1.Text[2*I-1];
Ch2:=edit1.Text[2*I];
if (ord(Ch1)>=ord('0')) and (ord(Ch1)<=ord('9')) then
Byte1:=Ord(Ch1)-48
else if (ord(Ch1)>=ord('a')) and (ord(Ch1)<=ord('f')) then
Byte1:=Ord(Ch1)-87
else if (ord(Ch1)>=ord('A')) and (ord(Ch1)<=ord('F')) then
Byte1:=Ord(Ch1)-55;
if (ord(Ch2)>=ord('0')) and (ord(Ch2)<=ord('9')) then
Byte2:=Ord(Ch2)-48
else if (ord(Ch2)>=ord('a')) and (ord(Ch2)<=ord('f')) then
Byte2:=Ord(Ch2)-87
else if (ord(Ch2)>=ord('A')) and (ord(Ch2)<=ord('F')) then
Byte2:=Ord(Ch2)-55;
Sendvar[I]:=Byte1*16+Byte2;
end;
Form1.MSComm1.Output:=Sendvar;
end;
我这个程序是把字符变量转为字节变量发送出去(给DSP),如果不转化的话,发送的是字符,例如字符1,DSP收到0031,这不是我想要的结果;但是转化为字节变量的话,我在发送字符01,DSP就能收到01了,昨天我又试了下这个程序,只是适用2个字符的情况好用,大概再改一下就可以了,我确实没说明白,呵呵,下面我把这个程序解释一下
procedure TForm1.Button3Click(Sender: TObject);
var //定义变量类型
Sendvar:Variant;
Ch1,Ch2:Char;
Byte1,Byte2:Byte;
I:Integer;
begin
Sendvar:=VarArrayCreate([1,Length(edit1.Text) div 2],varByte);//创建一个variant数组
Byte1:=0;
Byte2:=0;
for I:=1 to Length(edit1.Text) div 2 do
begin
Ch1:=edit1.Text[2*I-1]; //I=1时,把输入的第一个字符赋给Ch1
Ch2:=edit1.Text[2*I]; //I=1时,把输入的第一个字符赋给Ch2,依次类推
if (ord(Ch1)>=ord('0')) and (ord(Ch1)<=ord('9')) then //如果Ch1是0到9的字符,取出Ch1,在ASCII中的位置,然后减去0的位置赋给Byte1
Byte1:=Ord(Ch1)-48
else if (ord(Ch1)>=ord('a')) and (ord(Ch1)<=ord('f')) then
Byte1:=Ord(Ch1)-87
else if (ord(Ch1)>=ord('A')) and (ord(Ch1)<=ord('F')) then
Byte1:=Ord(Ch1)-55;
if (ord(Ch2)>=ord('0')) and (ord(Ch2)<=ord('9')) then
Byte2:=Ord(Ch2)-48
else if (ord(Ch2)>=ord('a')) and (ord(Ch2)<=ord('f')) then
Byte2:=Ord(Ch2)-87
else if (ord(Ch2)>=ord('A')) and (ord(Ch2)<=ord('F')) then
Byte2:=Ord(Ch2)-55;
Sendvar[I]:=Byte1*16+Byte2;
end;
Form1.MSComm1.Output:=Sendvar; //MSComm1.Output是variant变量,书上说要想发送2进制数据,就要把字节型数据放入variant型变量中,所以我采用了这种变换方法,以为是初学,编的可能麻烦了大家原谅啊,国庆中秋双节快乐吧
end;