在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
最佳性能版: 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;
感谢 网友 @[合肥]全能地图
|
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论