如何在`十六进制'(和后面)中转换`integs`的`string`?

时间:2014-12-29 11:13:30

标签: delphi hex

我想转换string中的integers hexadecimal(反之亦然)。

我见过IntToHex函数,但是它使用了一个小整数。

例如,我需要转换数字:

999888777666555444 in hexadecimal

然后相反:

hexadecimal number in 999888777666555444

2 个答案:

答案 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中没有标准的任意长度整数类型。但是有一些类型的实现。