function hex(c:char):Integer ;
var
x:integer;
begin
if c=' ' then
x:=0
else if (Ord(c)>=ord('0')) and (Ord(c)<=ord('9')) then
x:=Ord(c)-Ord('0')
else if (Ord(c)>=ord('a')) and (Ord(c)<=ord('f')) then
x:=Ord(c)-Ord('a')+10
else if (Ord(c)>=ord('A')) and (Ord(c)<=ord('F')) then
x:=Ord(c)-Ord('A')+10
else
//输入错误
x:=-1;
Result:=x;
end;//该函数接收1个至2个字符
//转换成功.输出对应16进制数的值
//转换失败.输出-1。
function HexToInt(S:String): Integer;
var
tmpInt1,tmpInt2:Integer ;
begin
if Length(S)=1 then
begin
Result:=hex(S[1]);
end
else if Length(S)=2 then
begin
tmpInt1:=hex(S[1]);
tmpInt2:=hex(S[2]);
if (tmpInt1=-1) or (tmpInt2=-1) then
Result:=-1
else
Result:= tmpInt1*16+tmpInt2;
end
else
//输入错误,转换失败
Result:=-1;
end;procedure TForm1.MSComm1Comm(Sender: TObject);
{var
serialinput:variant;
serialdatalength:integer;
i,tmpint:integer;
inputstring:string;
begin
if MSComm1.CommEvent=ComEvReceive then
begin
serialdatalength:=mscomm1.InBufferCount;
serialinput:=MSComm1.Input;
InputString:='';
for i:=0 to serialdatalength-1 do
begin
tmpInt:=serialinput[i];
InputString:=InputString+' '+LowerCase(IntToHex(tmpint,2));
end;
end;
memo1.Lines.Add(InputString); }
var
i,InputLen:Integer;
tmpInt:Integer;
tmpvar:Variant;
InputString:String;begin
if MSComm1.CommEvent=ComEvReceive then
begin
InputLen:=MSComm1.InBufferCount; //接收二进制数据,转换为十六进制显示
if HexShow.Checked then //如果不按16进制就可以显示,但显示的都是乱码
begin
tmpvar:=MSComm1.Input;
InputString:='';
for i:= 0 to InputLen-1 do
begin
tmpInt:=tmpvar[i];//(在这里提示错)
InputString:=InputString+' '+LowerCase(IntToHex(tmpint,2));
end;
end
//直接接收字符
else begin
InputString:=MSComm1.Input; //如果不按16进制就可以显示,但显示的都是乱码
end;
memo1.Text :=memo1.Text +InputString;
end;
end;
这是代码!请高手指教,试过N次了,用了Mscomm控件,
var
x:integer;
begin
if c=' ' then
x:=0
else if (Ord(c)>=ord('0')) and (Ord(c)<=ord('9')) then
x:=Ord(c)-Ord('0')
else if (Ord(c)>=ord('a')) and (Ord(c)<=ord('f')) then
x:=Ord(c)-Ord('a')+10
else if (Ord(c)>=ord('A')) and (Ord(c)<=ord('F')) then
x:=Ord(c)-Ord('A')+10
else
//输入错误
x:=-1;
Result:=x;
end;//该函数接收1个至2个字符
//转换成功.输出对应16进制数的值
//转换失败.输出-1。
function HexToInt(S:String): Integer;
var
tmpInt1,tmpInt2:Integer ;
begin
if Length(S)=1 then
begin
Result:=hex(S[1]);
end
else if Length(S)=2 then
begin
tmpInt1:=hex(S[1]);
tmpInt2:=hex(S[2]);
if (tmpInt1=-1) or (tmpInt2=-1) then
Result:=-1
else
Result:= tmpInt1*16+tmpInt2;
end
else
//输入错误,转换失败
Result:=-1;
end;procedure TForm1.MSComm1Comm(Sender: TObject);
{var
serialinput:variant;
serialdatalength:integer;
i,tmpint:integer;
inputstring:string;
begin
if MSComm1.CommEvent=ComEvReceive then
begin
serialdatalength:=mscomm1.InBufferCount;
serialinput:=MSComm1.Input;
InputString:='';
for i:=0 to serialdatalength-1 do
begin
tmpInt:=serialinput[i];
InputString:=InputString+' '+LowerCase(IntToHex(tmpint,2));
end;
end;
memo1.Lines.Add(InputString); }
var
i,InputLen:Integer;
tmpInt:Integer;
tmpvar:Variant;
InputString:String;begin
if MSComm1.CommEvent=ComEvReceive then
begin
InputLen:=MSComm1.InBufferCount; //接收二进制数据,转换为十六进制显示
if HexShow.Checked then //如果不按16进制就可以显示,但显示的都是乱码
begin
tmpvar:=MSComm1.Input;
InputString:='';
for i:= 0 to InputLen-1 do
begin
tmpInt:=tmpvar[i];//(在这里提示错)
InputString:=InputString+' '+LowerCase(IntToHex(tmpint,2));
end;
end
//直接接收字符
else begin
InputString:=MSComm1.Input; //如果不按16进制就可以显示,但显示的都是乱码
end;
memo1.Text :=memo1.Text +InputString;
end;
end;
这是代码!请高手指教,试过N次了,用了Mscomm控件,
如 s:= '12345';
stem := '$' + Copy(s, length(s)-3, 2);
iHex := StrToInt(stem);大概是這樣
var
I, InputLen: Integer;
tmpVar: PChar;
InputString: string;
begin
if MSComm1.CommEvent <> ComEvReceive then Exit;
if HexShow.Checked then
begin
InputLen := MSComm1.InBufferCount;
tmpVar := MSComm1.Input;
InputString := '';
for I := 0 to InputLen - 1 do
InputString := Format('%s %.2x', [InputString, Ord(tmpVar[I])]);
Delete(InputString, 1, 1);
InputString := LowerCase(InputString);
end
else InputString := MSComm1.Input;
Memo1.Text := Memo1.Text + InputString;
end;