我有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/