好久没写东西了,今天被群里的起哄,就写个函数吧
function _IntToHex_(const intValue:Integer;Digits:Integer):string;
const
strHex =
'000102030405060708090A0B0C0D0E0F' +
'101112131415161718191A1B1C1D1E1F' +
'202122232425262728292A2B2C2D2E2F' +
'303132333435363738393A3B3C3D3E3F' +
'404142434445464748494A4B4C4D4E4F' +
'505152535455565758595A5B5C5D5E5F' +
'606162636465666768696A6B6C6D6E6F' +
'707172737475767778797A7B7C7D7E7F' +
'808182838485868788898A8B8C8D8E8F' +
'909192939495969798999A9B9C9D9E9F' +
'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF' +
'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF' +
'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF' +
'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF' +
'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF' +
'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF';
type
PInt_stu=^TInt_stu;
TInt_stu=record
B1:Byte;
B2:Byte;
B3:Byte;
B4:Byte;
end;
var
P:PChar;
T:TInt_stu;
OutSize:Integer;
Index:Integer;
Buff:array[1..8] of char;
begin
if Digits > 8 then Digits := 8;
Integer(T) := intValue;
//\\
P := strHex;
Inc(P,T.B1 + T.B1);
Buff[7] := P^; Inc(P);
Buff[8] := P^;
P := strHex;
Inc(P,T.B2 + T.B2);
Buff[5] := P^;Inc(P);
Buff[6] := P^;
P := strHex;
Inc(P,T.B3 + T.B3);
Buff[3] := P^;Inc(P);
Buff[4] := P^;
P := strHex;
Inc(P,T.B4 + T.B4);
Buff[1] := P^;Inc(P);
Buff[2] := P^;
//\\
OutSize := 8;
for Index := 1 to 8 do
begin
if Buff[Index] = '0' then
Dec(OutSize)
else
Break;
end;
if OutSize < Digits then OutSize := Digits;
SetLength(Result,OutSize);
//\\
P := Pointer(Result);
for Index := OutSize downto 1 do
begin
P^ := Buff[8 - Index + 1];
Inc(P);
end;
end;