博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[Delphi] 字节序交换函数
阅读量:6423 次
发布时间:2019-06-23

本文共 1676 字,大约阅读时间需要 5 分钟。

最佳性能版:

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;

 

其它版本:

function ExchangeByteOrderDouble(const PV: PAnsiChar): Double;var  pd: PAnsiChar;begin  pd := @Result;  pd[0] := pv[7];  pd[1] := pv[6];  pd[2] := pv[5];  pd[3] := pv[4];  pd[4] := pv[3];  pd[5] := pv[2];  pd[6] := pv[1];  pd[7] := pv[0];end;

 

好吧,这个最慢

function SwapByteOrder(const Value: Double): Double; overload;var  V: Int64 absolute Result;  VV: Int64 absolute Value;begin  V :=    ((((VV and $00000000000000ff) shl 56) or    ((VV and $000000000000ff00) shl 40) or    ((VV and $0000000000ff0000) shl 24) or    ((VV and $00000000ff000000) shl 8) or    ((VV and $000000ff00000000) shr 8) or    ((VV and $0000ff0000000000) shr 24) or    ((VV and $00ff000000000000) shr 40) or    ((VV and $ff00000000000000) shr 56)));end;

 

感谢 网友

@[合肥]全能地图 
 

转载于:https://www.cnblogs.com/yangyxd/articles/5766850.html

你可能感兴趣的文章
在Linux服务器、客户端中构建密钥对验证进行远程连接
查看>>
和“C”的再遇
查看>>
一键安装kubernetes 1.13.0 集群
查看>>
RabbitMq的集群搭建
查看>>
spring boot + mybatis 同时访问多数据源
查看>>
URL中汉字转码
查看>>
[转]go正则实例
查看>>
Selector中关于顺序的注意事项
查看>>
小黑小波比.清空<div>标签内容
查看>>
Java中的ExceptionInInitializerError异常及解决方法
查看>>
Spring 注入bean时的初始化和销毁操作
查看>>
java线程同步原理(lock,synchronized)
查看>>
yRadio以及其它
查看>>
闪迪(SanDisk)U盘防伪查询(官方网站)
查看>>
Android onMeasure方法介绍
查看>>
无锁数据结构
查看>>
MySQL的变量查看和设置
查看>>
android onNewIntent
查看>>
XML特殊符号
查看>>
JavaMail邮箱验证用户注册
查看>>