我想转换string
中的integers
hexadecimal
(反之亦然)。
我见过IntToHex
函数,但是它使用了一个小整数。
例如,我需要转换数字:
999888777666555444 in hexadecimal
然后相反:
hexadecimal number in 999888777666555444
答案 0 :(得分:0)
如果需要转换超过8个字节的值,可以将非常长整数表示为byte,word,dword等数组。在这种情况下,您应该只转换任何特定项目并连接结果。相反是相同的(只有你应该记住的是价值应被视为右对齐)。
答案 1 :(得分:0)
将任意长度的缓冲区转换为十六进制:
function HexDump(const _Buffer; _Len: integer): string;
type
PByte = ^Byte;
var
i: integer;
p: PByte;
begin
p := @_Buffer;
Result := '';
for i := 0 to _Len - 1 do begin
Result := Result + Long2Hex2(p^);
Inc(p);
end;
end;
使用的实用功能:
const
/// <summary>
/// String containing all characters that can be used as digits
/// </summary>
DIGIT_CHARS: string = '0123456789ABCDEFGHIJKlMNOPQRSTUVWXYZ';
function Long2Num(_l: ULong; _Base: Byte; _MinWidth: Integer = 1): string;
var
m: Byte;
begin
Result := '';
while _l > 0 do begin
m := _l mod _Base;
_l := _l div _Base;
Result := DIGIT_CHARS[m + 1] + Result;
end;
while Length(Result) < _MinWidth do
Result := '0' + Result;
end;
function Long2Hex(_l: ULong): string;
begin
Result := Long2Num(_l, 16);
end;
function Long2Hex2(_l: ULong): string;
begin
Result := Long2Hex(_l);
if Length(Result) < 2 then
Result := '0' + Result;
end;
这些功能是我的dzlib的一部分。
注意:这不会像您预期的那样生成十六进制数字,例如如果你将一个整数传递给这样的函数:
var
IntValue: integer;
begin
IntValue := $12345678;
s := HexDump(IntValue, SizeOf(IntValue));
end;
你最终得到了s =&#39; 78563412&#39;因为英特尔处理器以小端格式存储整数。
不幸的是,反过来更难,因为Delphi中没有标准的任意长度整数类型。但是有一些类型的实现。