字符串转换问题!!!!(200分)

  • 主题发起人 主题发起人 flanker
  • 开始时间 开始时间
F

flanker

Unregistered / Unconfirmed
GUEST, unregistred user!
从一个定长128位的pchar(array[0..128] of byte;)类型的变量tt 将其通过如下变换:

for i := 0 to 127 do
outstr1 := outstr1 + inttohex(ord(tt),2);

变成一个256位长的16进制串,可是现在想把这个16进制串还原成定长128位的pchar(类型同tt),却无法实现,我是这样转换的:

var
Text, Buffer: PChar
//Buffer为得到的结果pchar
Bufsize : Integer;
--------------------
Text := pchar(Trim(Memo2.Text));  //Memo2.text为256位长的16进制串
BufSize := Length(Text) DIV 2;
HexToBin(Text, Buffer, BufSize);

很奇怪,得到的Buffer的Length居然不是128位的,结果转换出来就是和tt不一样!!!

这个问题我研究了2天就是无法搞定,请指教!!!!
 
function SendHexText(sub:string):string;
var i:integer;
str:string;
s:string;
buf:array[0..length] of byte;
begin
for i:=1 to length(sub) do
begin
str:=copy(sub,i*2-1,2);
if str='' then
break;
str:= Format('%d',[StrtoInt('$'+str)]);
buf[i-1] := str[1];
s:=s+char(strtoint(str));
end;
result:=s;
end;
 
楼上的回答我看得不是太懂。。。

这个方法是把16进制转回pchar吗?
 
变换和还原必须互为逆运算。你的问题出在HextoBin 上。

按你的变换算法,还原时就必须每次取2个Hex字符,转换为Char 即可。
 
来自:自由者, 时间:2004-4-11 10:16:05, ID:2551713
变换和还原必须互为逆运算。你的问题出在HextoBin 上。

按你的变换算法,还原时就必须每次取2个Hex字符,转换为Char 即可。
--------------------------------------------------------------------------
能否帮忙写个方法? 我刚学Delphi不久,很多问题还搞不清楚。。。
 
procedure HexToPChar(Text: string
OutBuffer: PChar);
//Text :256位长的16进制串
//OutBuffer: 128位的pchar Buffer
var i: integer;
s: string;
begin
for i:=1 to length(Text) do
begin
s:=copy(Text,i*2-1,2)
//顺序取2个Hex字符
s:=Char(StrToInt('$'+s))
//Hex -> Char
StrCat(OutBuffer,PChar(s))
//copy to OutBuffer
end;

end;

OutBuffer 就是你要的。
 
你用BinToHex与HexToBin两个函数进行互逆转一下,干嘛的自己写函数啊。
 
To自由者:

我用了你的的方法,可是会出错,Access Violation at..............

跟踪进去 是在这里出错:StrCat(OutBuffer,PChar(s))
//copy to OutBuffer

是什么问题呢?
 
procedure HexToPChar(Text: string
OutBuffer: PChar);
//Text :256位长的16进制串
//OutBuffer: 128位的pchar Buffer
var i: integer;
s: string;
begin
for i:=1 to length(Text) div 2 do
^^^^^^^^^^^^^^^^^^^^^^^^^^^
begin
s:=copy(Text,i*2-1,2)
//顺序取2个Hex字符
s:=Char(StrToInt('$'+s))
//Hex -> Char
OutBuffer:=OutBuffer+s
//copy to OutBuffer
end;

end;
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
915
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部