ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Delphi 高低字节交换

2022-08-25 04:33:12  阅读:191  来源: 互联网

标签:function begin end LongWord Delphi 交换 Value Result 低字节


内存中的字节顺序与网络传输的字节顺序是不一样的,用名词说就是大端存储和小端存储的区别,有时候就需要转换。
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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有