其他分享
首页 > 其他分享> > Delphi 高低字节交换

Delphi 高低字节交换

作者:互联网

内存中的字节顺序与网络传输的字节顺序是不一样的,用名词说就是大端存储和小端存储的区别,有时候就需要转换。
Delphi7不支持inline内联函数,可以把inline去掉。

function Swap16(const Value: Word): Word; inline;
begin
  Result := Swap(Value);
end;

function Swap32(const Value: LongWord): LongWord; inline;
begin
  Result := Swap(Word(Value)) shl 16 + Swap(Word(Value shr 16));
end;

function Swap64(const Value: Int64): Int64;
{$IFDEF WIN32}
asm
  mov     edx, [ebp + $08]
  mov     eax, [ebp + $0c]
  bswap   edx
  bswap   eax
{$ELSE}
{$IFDEF WIN64}
asm
  mov     rax, rcx
  bswap   rax
{$ELSE}
begin
  Result := Swap32(LongWord(Value));
  Result := (Result shl 32) or Swap32(LongWord(Value shr 32));
{$ENDIF}
{$ENDIF}
end;

function SwapFloat(const Value: Single): Single; overload; inline;
var
  R: LongWord absolute Result;
  V: LongWord absolute Value;
begin
  R := Swap32(V);
end;

function SwapFloat(const Value: Double): Double; overload; inline;
var
  R: Int64 absolute Result;
  V: Int64 absolute Value;
begin
  R := Swap64(V);
end;

以上转载自:https://www.cnblogs.com/yangyxd/articles/5766850.html

另外在贴一个十六进制字符串的大小端序交换函数,实现"5A374238424B4342"==>>"42434B423842375A"

function SwapHexString(Value: string): string;
var
  TempPchar: Pchar;
  i: integer;
  Str: string;
begin
  //将字符串 Char数组化
  TempPchar := Pchar(Value);
  i := 0;
  Str := '';
  while i < length(TempPchar) do
  begin
    Str := TempPchar[i] + TempPchar[i + 1] + Str;
    i := i + 2;
  end;
  result := Str;
end;

标签:function,begin,end,LongWord,Delphi,交换,Value,Result,低字节
来源: https://www.cnblogs.com/YXGust/p/16622934.html