要做串口通信的程序,请问如何将带中英文和数字的文本转换为16进制格式啊?然后再怎么转换回来?谢谢,急!!!
解决方案 »
- 电脑怎么登陆3gqq.qq.com
- 兄弟们救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!!!!!救命啦!!!!
- 关于Image控件,谢谢!
- ★★★ 庆祝结婚,散分纪念,欢迎捧场,谢谢! ★★★
- 这样的SQL语句应该如何写?
- 在用ADOQUERY缓存录入时如何保证数据的唯一性?
- 求fastreport2.5注册版
- 时间格式问题(很恐怖的错误),请朋友们指点一下迷津
- 请 wjlsmail(计算机质子) 、NightCloud()来拿分!!
- 简单的问题,进者有分!(200分)
- 谁可以给我个DELPHI7。0的注册码
- extcsdn请接分
begin
getmem(buffer,2*sizeof(char));
bintohex('ab',buffer,2);
showmessage(buffer);
freemem(buffer);
end;
procedure TForm1.Edit1Change(Sender: TObject);
var s: string;
i, j, k: integer;
a: array[1..1000] of char;
begin
s:='';
for i:=1 to Length(Edit1.Text) do begin
j:=Integer(Edit1.Text[i]);
s:=s+Copy(Format('%X ',[j+$100]) ,2,3);
end;
Edit2.Text:=s; StringToWideChar(Edit1.Text, @(a[1]), 500);
s:=''; i:=1;
while ((a[i]<>#0) or (a[i+1]<>#0)) do begin
j:=Integer(a[i]); k:=Integer(a[i+1]);
s:=s+Copy(Format('%X ',[j*$100+k+$10000]) ,2,5);
i:=i+2;
end;
Edit3.Text:=s;end;
我试了几次,有点小问题,我的程序如下:
procedure TCommForm.chkRecClick(Sender: TObject);
var buffer:pchar;
str: string;
begin
if TCheckBox(Sender).Checked then begin
getmem(buffer,sizeof(char)*length(memRec.Text));
bintohex(pchar(memRec.Text),buffer,length(memRec.Text));
memRec.Text := buffer;
freemem(buffer);
end else begin
str := memRec.Text;
getmem(buffer,sizeof(char)*length(memRec.text));
HexToBin(pchar(lowercase(str)),buffer,Length(memRec.Text));
memRec.Text := buffer;
freemem(buffer);
end;
end;测试数据:'woaini'转一次:'776F61696E69A'
转还原:'woaini'
再转一次:'776F61696E69'(后面有个制表符)
再转还原:'woaini'
再转一次:'776F61696E69C'
转还原:'woaini'
再转:'776F61696E69A'如此循环……
edit3显示的是什么东东啊?和EDIT2差不多,就是每个HEX后面多了几个0、没有了空格。
function StrToHexStr(Str:String):String;
var
i:Integer;
begin
for i:=1 to Length(Str) do
begin
Result:=Result+IntToHex(Ord(Str[i]),2);
end;
end;
function HexStrToStr(Str:String):String;
function HexToInt(Str:String):Integer;
var
l,i,b:Integer;
begin
l:=Length(Str);
Str:=UpperCase(Str);
for i:=1 to l do
begin
case Str[i] of
'0'..'9':b:=Ord(Str[i])-Ord('0');
'A'..'F':b:=Ord(Str[i])-Ord('A')+10;
end;
Result:=Result+b*Round(Power(16,l-i));
end;
end;
var
i:Integer;
s:String;
begin
i:=1;
while i<Length(Str) do
begin
s:=Str[i]+Str[i+1];
Result:=Result+Chr(HexToInt(s));
Inc(i,2);
end;
end;
var
i:Integer;
begin
for i:=1 to Length(Str) do
begin
Result:=Result+IntToHex(Ord(Str[i]),2);
end;
end;
function HexStrToStr(Str:String):String;
function HexToInt(Str:String):Integer;
var
l,i,b:Integer;
begin
Result:=0;
l:=Length(Str);
Str:=UpperCase(Str);
for i:=1 to l do
begin
case Str[i] of
'0'..'9':b:=Ord(Str[i])-Ord('0');
'A'..'F':b:=Ord(Str[i])-Ord('A')+10;
end;
Result:=Result+b*Round(Power(16,l-i));
end;
end;
var
i:Integer;
s:String;
begin
i:=1;
while i<Length(Str) do
begin
s:=Str[i]+Str[i+1];
Result:=Result+Chr(HexToInt(s));
Inc(i,2);
end;
end;