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

简介: 浮点数float转换成十六进制字符串的方法(FloatToHex)

科技背景_副本 公众号_副本.png

本文从原文:http://blog.csdn.net/cswangbin/article/details/6053569得到灵感

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

[delphi]  view plain copy  
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;  

例子:

[delphi]  view plain copy  
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的原型。

[delphi]  view plain copy
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 plain copy
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写的单精度浮点数转换工具验证。

相关文章
|
6月前
QT里面字符串转ieee754标准的float浮点数
QT里面字符串转ieee754标准的float浮点数
139 0
|
Go
Go语言浮点数完全手册 float32和float64一文掌握!
Go语言浮点数完全手册 float32和float64一文掌握!
1688 0
|
1月前
|
存储 数据采集 数据处理
Pandas中批量转换object至float的高效方法
在数据分析中,常需将Pandas DataFrame中的object类型列转换为float类型以进行数值计算。本文介绍如何使用`pd.to_numeric`函数高效转换,并处理非数字值,包括用0或平均值填充NaN值的方法。
40 1
|
2月前
|
前端开发
前端基础(十一)_Float浮动、清除浮动的几种方法
本文介绍了浮动的概念、属性、特性以及清除浮动的几种方法,并通过实例演示了如何使用CSS实现元素的浮动和处理浮动带来的问题。
78 3
|
4月前
|
存储 SQL 数据库
MySQL设计规约问题之为何推荐用DECIMAL代替FLOAT和DOUBLE来存储精确浮点数
MySQL设计规约问题之为何推荐用DECIMAL代替FLOAT和DOUBLE来存储精确浮点数
|
4月前
|
存储 Python
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
语音输入,python数据类型,type()用来查看数据类型,数据类型转换,int(x)转整数,float(x)转换为浮点数,str(x),将对象转为字符串,标识符,标识符不允许使用关键字,关键字参考
|
6月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
181 2
|
6月前
|
存储 编译器 C语言
魔性的float浮点数精度问题
魔性的float浮点数精度问题
61 0
|
Python
dataframe 中float转字符串
要将DataFrame中的浮点数列转换为字符串列,可以使用`astype()`方法将列的数据类型转换为字符串。以下是一个示例: 假设有一个DataFrame `df`,其中包含一个名为`column_name`的浮点数列: ```python import pandas as pd # 示例DataFrame df = pd.DataFrame({'column_name': [1.0, 2.5, 3.2, 4.7]}) # 将浮点数列转换为字符串列 df['column_name'] = df['column_name'].astype(str) # 打印转换后的DataFrame
359 0