这是我写的.转换一个数组为字符串function ArryByteToHexStr(ArryData: array of Byte;iCount: Integer): string;stdcall; var iloop: Integer; stmp: string; begin for iloop := 0 to iCount - 1 do begin stmp := stmp + IntToHex(ArryData[iloop],2) + ' '; end; Result := stmp; //IntToHex(ArryData[iloop],2)第二个参数表示转化后要保留几位.如果为2:$10_->'0A' 如果为3:$10_->'00A' end;
procedure TForm13.SpeedButton8Click(Sender: TObject); var i:Integer; s1:string; k:integer; s:string; begin s:='7C87541FD3F3EF5016E12D411900C87A6046A8E8'; s1:=''; for i:=1 to Length(s) div 2 do begin k:=strtoint('$'+Copy(s,1,2)); s1:=s1+ Char(k); s:=Copy(s,3,Length(s)-2); end; ShowMessage(s1); end;
楼主大概是这个意思吧procedure TForm1.Button1Click(Sender: TObject); var s,t:string; i:integer; begin s:='0x7C87541FD3F3EF5016E12D411900C87A6046A8E8'; i:=3; t:=''; while i<length(s) do begin t:=t+char(strtoint(#36+s[i]+s[i+1])); i:=i+2 end; ShowMessage(t); end;
function TFrmMenu.UnicodeToAnsi(Unicode: string): Variant; var s,test:string; str:Widestring; i:integer; j,k:string[2]; Temp: Variant; begin i:=1; s:=''; while i<Length(Unicode)+1 do begin j:=Copy(Unicode,i+2,2); k:=Copy(Unicode,i,2); i:=i+4; s:=s+Char(ReadHex(j))+Char(ReadHex(k)); end; if s<>'' then s:=WideCharToString(PWideChar(s+#0#0#0#0)) // WideCharToStrVar(PWideChar(s+#0#0#0#0),test) else s:=''; str:=s; Temp := s; Result:=Temp; end; 看看这个有没有用
procedure TForm1.Button1Click(Sender: TObject); var dd:dword; begin dd:=$78954D20; Form1.Caption := format('%x',[dd]); end;%x就是格式化16进制了.楼主是不是要这种方法?
这样就可以了
比如
i : Integer ;
str : String ;
i := $10;
str := IntToHex(i,2);
这样
str := '10'了
for ii := Low(aryByte) to High(aryByte) do
str := str + Format("%.2x",aryByte[ii]);
这样就可以了
比如
i : Integer ;
str : String ;
i := $10;
str := IntToHex(i,2);
这样
str := '10'了这是把16进制的整数转化为16进制的字符串
var
iloop: Integer;
stmp: string;
begin
for iloop := 0 to iCount - 1 do
begin
stmp := stmp + IntToHex(ArryData[iloop],2) + ' ';
end;
Result := stmp;
//IntToHex(ArryData[iloop],2)第二个参数表示转化后要保留几位.如果为2:$10_->'0A' 如果为3:$10_->'00A'
end;
var
i:Integer;
s1:string;
k:integer;
s:string;
begin
s:='7C87541FD3F3EF5016E12D411900C87A6046A8E8';
s1:='';
for i:=1 to Length(s) div 2 do
begin
k:=strtoint('$'+Copy(s,1,2));
s1:=s1+ Char(k);
s:=Copy(s,3,Length(s)-2);
end;
ShowMessage(s1);
end;
你觉得你的方法能把0x7C87541FD3F3EF5016E12D411900C87A6046A8E8转成字符吗?试一下再说
[/Quote]
你先在你程序定义这样一个16进的数再说
没理解别人的意思 就别乱发言
你先在你程序定义这样一个16进的数再说
没理解别人的意思 就别乱发言
[/Quote]
0x7C87541FD3F3EF5016E12D411900C87A6046A8E8
delphi中最大的整数类型为int64,这个数远远大于int64,你的方法根本不行
呵呵
这个数远超过了整型数据的范围
我估计楼主的 0x7C87541FD3F3EF5016E12D411900C87A6046A8E8
是一个16进制的字符串
var
s,t:string;
i:integer;
begin
s:='0x7C87541FD3F3EF5016E12D411900C87A6046A8E8';
i:=3;
t:='';
while i<length(s) do
begin
t:=t+char(strtoint(#36+s[i]+s[i+1]));
i:=i+2
end;
ShowMessage(t);
end;
但是你的方法:
i : Integer ;
str : String ;
i := $10;
str := IntToHex(i,2);
这样
str := '10'了 现在你的i是整型的而我的应该是十六进制的,这样能行吗???
var s,test:string;
str:Widestring;
i:integer;
j,k:string[2];
Temp: Variant;
begin
i:=1;
s:='';
while i<Length(Unicode)+1 do
begin
j:=Copy(Unicode,i+2,2);
k:=Copy(Unicode,i,2);
i:=i+4;
s:=s+Char(ReadHex(j))+Char(ReadHex(k));
end;
if s<>'' then
s:=WideCharToString(PWideChar(s+#0#0#0#0))
// WideCharToStrVar(PWideChar(s+#0#0#0#0),test)
else
s:='';
str:=s;
Temp := s;
Result:=Temp;
end;
看看这个有没有用
var
dd:dword;
begin
dd:=$78954D20;
Form1.Caption := format('%x',[dd]);
end;%x就是格式化16进制了.楼主是不是要这种方法?