有关ASC2码与十六进制(100分)

  • 主题发起人 我爱DELPHI2002
  • 开始时间

我爱DELPHI2002

Unregistered / Unconfirmed
GUEST, unregistred user!
请问各位大虾:
在DELPHI 中怎样将ASC2码和十六进制相互转换?比如要实现在一个文本框中输入ASC2码时同时要在另一个文本框中以十六进制显示?反之亦然?急啊?
 
参考:http://www.delphibbs.com/delphibbs/dispq.asp?lid=1370434
 
ascii->十六进制
就是十进制到十六进制的转换
比如ascii的32就是十六进制的20H,反之亦然
 
bintohex[:D]
 
在 Edit1 的 OnChange 中处理:

procedure TForm1.Edit1Change(Sender: TObject);
var
s:string;
i:integer;
begin
s:='';
for i:=1 to length(Edit1.text) do
s:=s+inttohex(ord(Edit1.text),2);
Edit2.text:=s;
end;
 
ASCII->HEX:

function StrToHex(const S: string): string;
var
i: Integer;b:byte;
p1,r1:pchar;
const Hex:array[0..15] of char='0123456789ABCDEF';
begin
setlength(result,length(S)*2);
p1:=@s[1];
r1:=@result[1];
for i := 1 to Length(S) do
begin
b:=byte(p1^);
r1^:=Hex[b shr 4];
inc(r1);
r1^:=Hex[b and $F];
inc(p1);
inc(r1);
end;
end;

HEX->ASCII:

举例:
str := '61';
char(strtoint('$'+str));
 
给你个简单例子看看吧
asc->hex

procedure TForm1.Button2Click(Sender: TObject);
var
s:string;
Len,i:integer;
begin
s:=edit1.text;
len:=length(s);
edit2.text:='';
for i :=1 to len do
begin
edit2.text:=edit2.text+format('%x ',[byte(s)]);
end;

end;

反过来时需要取两位,然后用char();
 
首部 function Format(const Format: string; const Args: array of const): string; $[SysUtils.pas
功能 返回按指定方式格式化一个数组常量的字符形式
说明 这个函数是我在Delphi中用得最多的函数,现在就列举几个例子给你个直观的理解
"%" [索引 ":"] ["-"] [宽度] ["." 摘要] 类型
Format('x=%d', [12]); //'x=12' //最普通
Format('x=%3d', [12]); //'x= 12' //指定宽度
Format('x=%f', [12.0]); //'x=12.00' //浮点数
Format('x=%.3f', [12.0]); //'x=12.000' //指定小数
Format('x=%.*f', [5, 12.0]); //'x=12.00000' //动态配置
Format('x=%.5d', [12]); //'x=00012' //前面补充0
Format('x=%.5x', [12]); //'x=0000C' //十六进制
Format('x=%1:d%0:d', [12, 13]); //'x=1312' //使用索引
Format('x=%p', [nil]); //'x=00000000' //指针
Format('x=%1.1e', [12.0]); //'x=1.2E+001' //科学记数法
Format('x=%%', []); //'x=%' //得到"%"
S := Format('%s%d', [S, I]); //S := S + StrToInt(I); //连接字符串
参考 proceduer SysUtils.FmtStr
例子 Edit1.Text := Format(Edit2.Text, [StrToFloatDef(Edit.3.Text, 0)]);
 
同意用IntToHex!
 
多谢resun!
但我不知道HEX->ASC2怎么做,能给出个例子吗?多谢!
 
Hex->ASCII: Ord(Char(Byte(...)))
 
1。先把输入转换成十进制数据。
2。再把十进制数据转换成十六进制数据。
这样做的好处是都有现成的函数可用,不用写太多代码。
 
faint,我前面都说了呀:
HEX->ASCII:

举例:
str := '61';
char(strtoint('$'+str));
 
因为你要显示出来,有点麻烦,不知道有没有更好的办法

接我上面的小例子
procedure TForm1.Button3Click(Sender: TObject);
var
s:string;
len,i:integer;
Ba:array of byte;
begin
s:=edit2.text;
len:=length(s);
edit1.text:='';
setlength(ba,len div 3);

for i :=1 to len div 3 do
begin
ba[i-1]:=(strtoint('$'+s[3*i-2]+s[3*i-1]));
// showmessage(format('%x',[ba[i-1]]));
edit1.text:=edit1.text+Char(ba[i-1]);
end;

end;
 
不就搞定了。[:D]

procedure TForm1.Button1Click(Sender: TObject);
Var
data:array[0..12] of char;
begin
//init data[] first
//then input any chr to the function
BintoHex(chr(23)+chr(254)+chr(200),data,3);
//show the data[]
showmessage(data);
end;
 
顶部