procedure TForm1.Button2Click(Sender: TObject); var Mem: TMemoryStream; i, j: DWORD; begin i := 1000; j := 0; Mem := TMemoryStream.Create; Mem.Write(i, SizeOf(DWORD)); Mem.Position := 0; Mem.Read(j, SizeOf(DWORD)); Mem.Free; ShowMessage(IntToStr(j));end;
借位置存两个涵数 implementation uses StrUtils;{$R *.dfm} function ConvertHexstrToDouble(s:string):Double; var i:integer; pConvert:PChar; begin pConvert:=PChar(@Result); ZeroMemory(pConvert,SizeOf(Result)); for i:=0 to Round(length(s)/3)-1 do begin if(i>=SizeOf(Result))then break; pConvert[i]:=Chr(StrToInt('$'+LeftStr(PChar(@PChar(s)[i*3]),2))); end; end; function ConvertDoubleToHexstr(d:Double):string; var i:Integer; pConvert:PChar; begin pConvert:=PChar(@d); Result := ''; for i := 0 to SizeOf(d) - 1 do begin Result := Result + IntToHex(Integer(pConvert[i]),2)+' '; end; end;
(另外,682的十六进制应该是$02AA,不是$021A)
var
I: Word;
J: DWORD;
begin
J := 0;
I := 682;
PByte(Integer(@J) + 3)^ := PByte(@I)^;
PByte(Integer(@J) + 2)^ := PByte(Integer(@I) + 1)^;
end;
IntToHex是用来把整数转换为16进制字符串的.
是不是要这?
var
Mem: TMemoryStream;
i, j: DWORD;
begin
i := 1000;
j := 0;
Mem := TMemoryStream.Create;
Mem.Write(i, SizeOf(DWORD));
Mem.Position := 0;
Mem.Read(j, SizeOf(DWORD));
Mem.Free;
ShowMessage(IntToStr(j));end;
implementation
uses
StrUtils;{$R *.dfm}
function ConvertHexstrToDouble(s:string):Double;
var
i:integer;
pConvert:PChar;
begin
pConvert:=PChar(@Result);
ZeroMemory(pConvert,SizeOf(Result));
for i:=0 to Round(length(s)/3)-1 do
begin
if(i>=SizeOf(Result))then
break;
pConvert[i]:=Chr(StrToInt('$'+LeftStr(PChar(@PChar(s)[i*3]),2)));
end;
end;
function ConvertDoubleToHexstr(d:Double):string;
var
i:Integer;
pConvert:PChar;
begin
pConvert:=PChar(@d);
Result := '';
for i := 0 to SizeOf(d) - 1 do
begin
Result := Result + IntToHex(Integer(pConvert[i]),2)+' ';
end;
end;