delphi - 如何在Delphi中将字节数组转换为其十六进制表示

标签 delphi delphi-2009

我有TBytes变量,其值为[0,0,15,15]。如何将其转换为“ 00FF”?

我不想使用循环,bcoz这种逻辑要在时间密集型函数中使用。

(我尝试使用BinToHex,但无法将其与字符串变量一起使用。)

感谢和问候,

帕万

最佳答案

// Swapping is necessary because x86 is little-endian.
function Swap32(value: Integer): Integer;
asm
  bswap eax
end;

function FourBytesToHex(const bytes: TBytes): string;
var
  IntBytes: PInteger;
  FullResult: string;
begin
  Assert(Length(bytes) = SizeOf(IntBytes^));
  IntBytes := PInteger(bytes);
  FullResult := IntToHex(Swap32(IntBytes^), 8);
  Result := FullResult[2] + FullResult[4] + FullResult[6] + FullResult[8];
end;


如果最后一行看起来有些奇怪,那是因为您要求将一个四字节的数组转换成一个四字符的字符串,而在通常情况下,需要八个十六进制数字来表示一个四字节的值。我只是假设您的字节值都在16以下,因此只需要一个十六进制数字。如果您的示例是拼写错误,则只需用这行替换最后两行:

Result := IntToHex(Swap32(IntBytes^), 8);


顺便说一句,您的禁止循环需求将无法满足。 IntToHex在内部使用循环。

关于delphi - 如何在Delphi中将字节数组转换为其十六进制表示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1060321/

相关文章:

Delphi 默默地裁剪字符串文字

Delphi TCollection - 可以防止在运行时更改项目吗?

Delphi 2009 仅在一个单元的断点处停止

delphi - xul.dll和图像中的异常未在delphi应用程序内的gecko浏览器中显示

class - 德尔福 2009 : Component Object property default value

delphi - TStringList .add 从随机函数中生成重复项

delphi - 应用程序调用了为不同线程编码的接口(interface)

delphi - 如何使我的自定义控件在其表单或应用程序接收和失去焦点时收到通知?

delphi - Delphi loadlibrary() 中的错误

delphi:通过 64 位的 postmessage 发送一个类