• delphi 浮点数转换成十六进制字符串的方法


     我们在研究封包技术时,经常会碰到将浮点数转换成十六进制形式。比如在游戏中人物的座标,经常就用浮点数来表示。怎么将浮点数转换成十六进制字符串形式呢?下面我将写出其在DELPHI中的方法。
           先讲点背景吧,我们通常说的小数,一般就是指浮点数,而且当值不大的时候,泛指单精度浮点数。在delphi中,Single是单精度浮点数,占用4个字节存储,高精度的Double占用8个字节,Real是borland早期用过的,占用6个字节,现在逐渐淡出了。
           通过调用Delphi中的BinToHex函数可以很容易实现其转换。下面是Delphi的原型。

    procedure BinToHex(Buffer: PAnsiChar; Text: PAnsiChar; BufSize: Integer); assembler;
    const
    Convert: array[0..15] of AnsiChar = AnsiString('0123456789ABCDEF');
    var
    I: Integer;
    begin
    for I := 0 to BufSize - 1 do
    begin
    Text[0] := Convert[Byte(Buffer[I]) shr 4];
    Text[1] := Convert[Byte(Buffer[I]) and $F];
    Inc(Text, 2);
    end;
    end;

    解释一下该函数:内存中地址为Buffer,长度为BufSize的一段数据转成16进制并存入Text所指向的内存地址中,Text的长度至少需要BufSize*2才能放下转换后的数据。
          有了这些背景,就可以理解我下面写的代码了。

    Function FloatToHex(Value:single):string;
    var
    HexText: String;
    begin
    SetLength(HexText,2*SizeOf(Value));
    BinToHex(pchar(@Value),pchar(@HexText[1]),SizeOf(Value));
    return Hextext
    end;

     比如在调用的时候,假设传入3.1415,得到的结果输出为560E4940,注意这里的结果是低位在前,高位在后。意思就是40490E56就是我们通常说的3.1415。
          你可以用Greatboy写的单精度浮点数转换工具验证。

  • 相关阅读:
    防火墙透明模式
    HP管理工具System Management Homepage安装配置
    kbmmw 中JSON 中使用SQL 查询
    kbmmw 中JSON 操作入门
    第一个kbmmw for Linux 服务器
    kbmmw 5.02发布
    kbmmw 5.01 发布
    使用delphi 10.2 开发linux 上的Daemon
    使用unidac 在linux 上无驱动直接访问MS SQL SERVER
    使用delphi 10.2 开发linux 上的webservice
  • 原文地址:https://www.cnblogs.com/zhangzhifeng/p/5580444.html
Copyright © 2020-2023  润新知