我们在研究封包技术时,经常会碰到将浮点数转换成十六进制形式。比如在游戏中人物的座标,经常就用浮点数来表示。怎么将浮点数转换成十六进制字符串形式呢?下面我将写出其在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写的单精度浮点数转换工具验证。

delphi 浮点数转换成十六进制字符串的方法的更多相关文章

  1. delphi 浮点数float转换成十六进制字符串的方法(FloatToHex)

    重新书写了float型转为十六进制的delphi程序 Function FloatToHex(Value: single): string; var l, i: integer; HexText,te ...

  2. javascript浮点数转换成整数三种方法

    将浮点数转换成整数方法有很多,分享三种常用方法. Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseInt位运算符Math.floor Math.ceil ...

  3. python 将字节字符串转换成十六进制字符串

    想将一个十六进制字符串解码成一个字节字符串或者将一个字节字符串编码成一个十六进制字符串 1)只是简单的解码或编码一个十六进制的原始字符串,可以使用 binascii模块 >>> s ...

  4. javascript将浮点数转换成整数的三个方法

    浮点数转换成整数方法有很多,本例为大家介绍常用的三个方法,如果读者想到其他好用方法,也可以交流一下   Summary 暂时我就想到3个方法而已.如果读者想到其他好用方法,也可以交流一下 parseI ...

  5. C#中将字符串转换成Md5值的方法

    原文:C#中将字符串转换成Md5值的方法 版权声明:有问题可联系博主QQ:15577969,大家一起相互交流和学习. https://blog.csdn.net/qq15577969/article/ ...

  6. C#中对象,字符串,dataTable、DataReader、DataSet,对象集合转换成Json字符串方法。

    C#中对象,字符串,dataTable.DataReader.DataSet,对象集合转换成Json字符串方法. public class ConvertJson { #region 私有方法 /// ...

  7. js如何把字符串转换成json数据的方法

    js如何把字符串转换成json数据的方法 function strtojson(str){ var json = eval('(' + str + ')'); return json; } 方法二 f ...

  8. python 练习题:请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串

    # -*- coding: utf-8 -*- # 请利用Python内置的hex()函数把一个整数转换成十六进制表示的字符串 n1 = 255 n2 = 1000 print(hex(n1)) pr ...

  9. C语言-数字字符串转换成这个字符串对应的数字(十进制、十六进制)

    数字字符串转换成这个字符串对应的数字(十进制.十六进制) (1)数字字符串转换成这个字符串对应的数字(十进制) 要求:这个字符串参数必须包含一个或者多个数字,函数应该把这些数字转换为整数并且返回这个整 ...

随机推荐

  1. 【现代程序设计】homework-01

    HOMEWORK-01 1) 建立 GitHub 账户, 把课上做的 “最大子数组之和” 程序签入 已完成. 2) 在 cnblogs.com 建立自己的博客. 写博客介绍自己的 GitHub 账户. ...

  2. Vuex, api, SSR, module

    vuex https://vuex.vuejs.org/zh/guide/actions.html 单向数据流 单例模式 & 多个组件共享状态 State & 状态注入 Vue.use ...

  3. 朗格拉日计数(counter)

    朗格拉日计数(counter) 题目描述 在平面上以圆周等分排列着n个带标号(标号为1-n)的点,你需要计算有多少个三元组(a,b,c),满足a<b<c而且标号为a,b,c的点在圆上分布的 ...

  4. TCP面试题之四次挥手过程

    TCP四次挥手过程: 1.第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态: 2.第二次挥手:Server收到FIN后,发 ...

  5. Android自复制传播APP原理学习(翻译)

     Android自复制传播APP原理学习(翻译) 1 背景介绍 论文链接:http://arxiv.org/abs/1511.00444 项目地址:https://github.com/Tribler ...

  6. Require.js 详细了解

    一.Require.js 作用 1.1.是JS 文件加载器,实现js脚本的AMD异步加载. 保证不阻塞页面的渲染和其后的脚本的执行,并提供了在加载完成之后的执行相应回调函数的功能. 1.2.实现JS. ...

  7. 洛谷P1522 牛的旅行

    题目描述 农民 John的农场里有很多牧区.有的路径连接一些特定的牧区.一片所有连通的牧区称为一个牧场.但是就目前而言,你能看到至少有两个牧区通过任何路径都不连通.这样,Farmer John就有多个 ...

  8. 【IDEA】IDEA下maven项目无法提示和使用EL表达式的解决办法

    今天在IDEA创建web项目之后发现无法使用EL和JSTL, 一.如果JSP中无法自动提示EL表达式,比如${pageContext.request.contextPath},可在pom.xml的&l ...

  9. c# GDI画图 双缓冲画图分析

    双缓冲绘图分析  1.Windows 绘图原理  我们在 Windows 环境下看到各种元素,如菜单.按钮.窗口.图像,从根本上说,都是“画”出来的.这时的屏幕,就相当于一块黑板,而 Windows ...

  10. 解决Windows下网络原因Composer安装失败问题的方法

    由于Composer镜像都在国外,所以直接在官网下载Windows Installer后安装很多情况下是无法成功安装的. 解决办法: 1,将php添加到系统环境变量,并开启openssl扩展. 2,点 ...