信息解码问题!!! (在线等!!!)(10分)

  • 主题发起人 主题发起人 king_213
  • 开始时间 开始时间
K

king_213

Unregistered / Unconfirmed
GUEST, unregistred user!
假如有一个十六进制字符串 Str:='0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F3'(是经过编码的)
我想将它还原成编码前的字符串 其中'0E'和'0F'之间的内容是汉字 不过要将'0E' 和 '0F'去掉 并且将其中的每两个表示汉字的十六进制字符的后一个十六进制字符的高位 变为1 (也就是与80取或) 然后再将两个十六进制字符转换为汉字字符 '0F'和'0E'之间的内容是每一个十六进制字符表示一个字母或数字 直接将一个十六进制字符转换为一个字母或数字
该如何写这个函数呀???
 
procedure TForm1.btn1Click(Sender: TObject);
const
str = '0E42504F584B2B417A0F3A0E5623565D53500F33360E365656583B750F202F200E4E64342853500F32370E365656583B750F2F200E30323B5533323A7E53500F33360E365656583B750F202F200E3A2A352653500F32340E365656583B750F202F200E307C4D3753500F32360E365656583B750F202F200E4E643A3A53500F';
var
rs,ts,ts2:String;
i ,j ,len: Integer;
Isdoubled:Boolean;
function getTwoChar(var i:Integer):string;
begin
Result := Copy(str,i,2);
Inc(i,2);
end;

function ToChar(s:string):Char;
begin
Result := Chr(StrToInt('$'+s));
end;
begin
len := Length(str);

Isdoubled := False;
rs:='';
while i<len do
begin
ts := getTwoChar(i);
if ts='0E' then
begin
Isdoubled := True;
Continue;
end;
if ts='OF' then
begin
Isdoubled := False;
Continue;
end;

rs := rs + ToChar(ts);
if Isdoubled then //中文第二个字符
begin
ts2 := getTwoChar(i);
j := StrToInt('$'+ts2);
j := j or $80;
rs := rs + chr(j);
end;
end;

edt1.Text := rs;
end;
这个是我写来测试,完全是按照你说的方式写的,不过解不出中文来,全是乱码。。。
 
后退
顶部