浮点数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写的单精度浮点数转换工具验证。

相关文章
|
27天前
QT里面字符串转ieee754标准的float浮点数
QT里面字符串转ieee754标准的float浮点数
13 0
|
7月前
|
Go
Go语言浮点数完全手册 float32和float64一文掌握!
Go语言浮点数完全手册 float32和float64一文掌握!
551 0
Qt浮点数(float)/16进制转换
Qt浮点数(float)/16进制转换
|
2月前
|
C#
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
C# 字节数组与INT16,float,double之间相互转换,字符数组与字符串相互转换,
37 1
|
8月前
|
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
183 0
|
Java Android开发
Android/Java判断字符串String是否为float浮点数或double类型
Android/Java判断字符串String是否为float浮点数或double类型 Android的TextUtils的isDigitsOnly方法检测整型数据没问题,但是检测浮点和double类型可能不会返回期望的...
5059 0
|
Java
java 如何将十六进制字符串转换为 float 符点型?相互转换
java 如何将十六进制字符串转换为 float 符点型? 先上代码: package com.weixiao.network; /** * java 如何将十六进制字符串转换为 float 符点型?相互转换 * Hex2Float * @author 微wx笑 * @date 2...
2177 0
|
BI
关于byte 进制 float String 编码 16进制字符串转16进制byte的问题
首先 只有String才与编码有关; byte与其他类型转换时,要注意大端点还是小端点, 编码: Ascii Unicode gbk utf-8等等  byte 占 8位 可由两个16进制数(0xff)组成,一个16进制占4位,也可由8位二进制数组成等等,与编码没关系,但可用2进制表示,也可由其他进制表示。 “0xff”这样的16进制字符串转换成16进制byte Stri
1269 0