重新书写了float型转为十六进制的delphi程序

Function FloatToHex(Value: single): string;
var
l, i: integer;
HexText,tempHexText,temp: String;
begin
SetLength(HexText, 2 * SizeOf(Value));
BinToHex(pchar(@Value), pchar(@HexText[1]), SizeOf(Value));
l := length(HexText);
for i := (l div 2) downto 1 do
begin
temp:=copy(HexText,(2*i-1),2);
tempHexText := tempHexText + temp;
end;
result := tempHexText;
end;

procedure TForm6.addButtonClick(Sender: TObject);
begin
editHar3.Text := FloatToHex(-12.545); // strtofloat(editHar1.Text)
end;

显示结果为 C148B852,结果正确,-12.545~C148B852

注意添加

uses StrUtils{截取字符串单元};

下面是原文:

我们在研究封包技术时,经常会碰到将浮点数转换成十六进制形式。比如在游戏中人物的座标,经常就用浮点数来表示。怎么将浮点数转换成十六进制字符串形式呢?下面我将写出其在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才能放下转换后的数据。
有了这些背景,就可以理解我下面写的代码了。
[delphi] view plaincopy
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 浮点数float转换成十六进制字符串的方法(FloatToHex)的更多相关文章

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

    我们在研究封包技术时,经常会碰到将浮点数转换成十六进制形式.比如在游戏中人物的座标,经常就用浮点数来表示.怎么将浮点数转换成十六进制字符串形式呢?下面我将写出其在DELPHI中的方法.       先 ...

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

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

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

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

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

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

  5. Java将其他数据格式转换成json字符串格式

    package com.wangbo.util; import java.beans.IntrospectionException; import java.beans.Introspector; i ...

  6. 如何将int整型转换成String字符串类型

    自动类型转换适用于兼容类型之间从小范围到大范围数据的转换. nt转换成String int i = 10; int b=1: System.out.pritnln(a + b); 里面靠近字符串,所以 ...

  7. javascript把RGB指定颜色转换成十六进制颜色(Converting R,G,B values to HTML hex notation)

    Prologue 看见一篇非常好的外国文章,Making annoying rainbows in javascript,事实上我当时非常想把它翻译下来的,可是对于一个连六级都没过的人确实有点难度,一 ...

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

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

  9. 图片转换成十六进制TXT文件

    最近学习了图片的转换,就学习了一下图片从二进制转换成十六进制,十六进制TXT文件转换成图片形式. using System; using System.Collections.Generic; usi ...

随机推荐

  1. 爬虫:Scrapy13 - 发送 email

    虽然 Python 通过 smtplib 库使得发送 email 变得非常简单,Scrapy 仍然提供了自己的实现.该功能十分易用,同时由于采用了 Twisted 非阻塞式(non-blocking) ...

  2. JavaWeb笔记(十)非关系型数据库Redis

    Redis Redis是一款高性能的NOSQL系列的非关系型数据库 主流的NOSQL产品 键值(Key-Value)存储数据库 相关产品: Tokyo Cabinet/Tyrant.Redis.Vol ...

  3. 【linxu】部署docker容器虚拟化平台

    实验所涉内容 Docker 概述 部署 docker 容器虚拟化平台 docker 平台基本使用方法 创建docker镜像和发布镜像方法 Container 容器端口映射 一 Docker 概述 Do ...

  4. Nginx日志管理配置

    1.创建日志目录 nginx 的默认日志目录所在硬盘空间可能比较小,所以根据硬盘的空间状况创建日志目录 例如:mkdir /backup/nginx_logs 2.修改nginx配置文件 配置 ngi ...

  5. 整合S2SH框架

    S2SH框架(Struts2,Spring,Hibernate)整合 Struts2.Hibernate和Spring.其中在Struts2部分主要为MVC设计思想,Struts2的处理流程及配置,S ...

  6. html & email template

    html & email template inline style build tools https://templates.mailchimp.com/getting-started/h ...

  7. [AGC010E] Rearranging [拓扑排序+堆]

    题面 传送门 思路 首先,一个显然的结论是:Alice调整过后的序列中任意两个不互质的数的相对顺序无法改变 那么我们可以以这个性质为突破口 我们在两个不互质的权值的点之间连一条边(没错这是个图论题!! ...

  8. [poj] 3304 Segments || 判断线段相交

    原题 给出n条线段,判断是否有一条直线与所有线段都有交点 若存在这样一条直线,那么一定存在一条至少过两个线段的端点的直线满足条件. 每次枚举两条线段的两个端点,确定一条直线,判断是否与其他线段都有交点 ...

  9. Codeforces 498D Traffic Jams in the Land | 线段树

    题目大意: 给坐标轴1~n的点,每个点有一个权值,从一个点走到下一个点需要1s,如果当前时间是权值的倍数就要多花1s 给出q组操作,C表示单点修改权值,A表示询问0时刻x出发到y的时间 题解:因为权值 ...

  10. BZOJ2716 [Violet 3]天使玩偶 【CDQ分治】

    题目 输入格式 输出格式 输入样例 //样例太长就不贴了.... 输出样例 //见原题 提示 题解 我们将曼哈顿距离式子中的绝对值去掉,每次只考虑x,y比当前点小的更新答案. 为了使所有点都对答案进行 ...