delphi颠倒16进制4个字节的顺序

例如001524F0改成F0241500

第1个回答  2010-04-10
参考如下程序就可以了:
procedure TForm1.Button1Click(Sender: TObject);
var
s1,s2:string;
i:integer;
begin
s1:=edit1.Text; //获取原始字符串
s2:='';
for i:=1 to (length(s1) div 2) do
s2:=s1[2*i-1]+s1[2*i]+s2;
edit2.Text:=s2; //输出颠倒后的字符串
end;

揭示:string类型的变量,可以像数组一样用下标1、2、3。。。来访问,必须从1开始,如:s[1]代表字符串中的第一个字节,s[2]代表字符串中的第二个字节,。。。

另外,s2:=s1[2*i-1]+s1[2*i]+s2;
不能写成:
s2:=s2+s1[2*i-1]+s1[2*i];

否则就颠倒不了。
第2个回答  2010-04-11
用1个Funtion就可以的哦

Function Trans(Msg: string): string;
var
TempPchar: Pchar;
i: integer;
Str: string;
begin
TempPchar := Pchar(Msg); //将字符串 Char数组化

i := 0;
Str := '';
while i < length(TempPchar) do begin
Str := TempPchar[i] + TempPchar[i+1]+ Str ;
i := i + 2;
end;
result := Str;
end;

然后调用一下 Trans(你的数据);

例如:在窗体上放1个 TEdit,然后名字叫 Edit1
1个TButton,名字是 Button1,可以这样写

function Trans(msg: string): string;
var
TempPchar: Pchar;
i: integer;
Str: string;
begin
TempPchar := Pchar(Msg); //将字符串 Char数组化

i := 0;
Str := '';
while i < length(TempPchar) do begin
Str := Str + TempPchar[i + 1] + TempPchar[i];
i := i + 2;
end;
result := Str;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.Text := Trans(edit1.text);
end;

就这样子哦....
第3个回答  2010-04-13
//进行转换
function trans(h:cardinal;len:integer):cardinal;
var
i:integer;
tmp:cardinal;
byt:array[0..3] of byte;
begin
tmp:=$0;
for i:=0 to len do
begin
byt[i]:=h;
h:=h shr 8;
tmp:= tmp shl 8;
tmp:= tmp + byt[i];
end;
result := tmp;
end;

//输出结果
procedure TForm1.Button1Click(Sender: TObject);
var
a:cardinal;
begin
a:=$001524F0;
edit1.Text := IntToHex(trans(a,sizeof(a)-1),8);
end;
第4个回答  2010-04-10
转成字符截取前两位,放一变量里,重复执行,存放 变量累加。
第5个回答  2010-04-12
htonl、ntohl
再闲麻烦自己copymemory去
相似回答