javaScript实现浮点数转十六进制字符


Posted in Javascript onOctober 29, 2013

最近一个嵌入式项目中需要WEB功能,因此想到利用HTML+JavaScript实现一些参数配置功能,参数由JavaScript生成十六进制数据,通过POST提交给单片机,然后再直接使用,以充分利用浏览器的计算能力。

由于JavaScript对浮点数的支持很弱,直接使用浮点数转十六进制功能,双不能实现平常在C语言中实现的4字节的存储表示法,通过搜索,并没有找到相关功能代码,在Node.js的Buffer类可以实现此功能,但又没办法使用(单片机存储空间有限),也没办法找到具体是如何实现的(看不太懂)。

例如:

123.456 ==》 0x42F6E979在C语言中,直接将一个浮点数转换成unsigned int再输出成十六进数就可以了,但在JavaScript中实现就不那么直接了。

有幸在网上找到了一个用C#实现的IEEE754标准的浮点数转换代码(IEEE754浮点数转换器(C#实现)点击打开链接),通过将此代码转换成JavaScript,完成了此份工作,为此,将代码贴出来,共享。

另外,我只实现了转成十六制,没有实现逆转(逆转代码)在C#代码中也有。

通过如下代码可以实现如下:
get_float_hex(123.456) ==> 42F6E979

function DecToBinTail(dec, pad) 
{ 
var bin = ""; 
var i; 
for (i = 0; i < pad; i++) 
{ 
dec *= 2; 
if (dec>= 1) 
{ 
dec -= 1; 
bin += "1"; 
} 
else 
{ 
bin += "0"; 
} 
} 
return bin; 
} 
function DecToBinHead(dec,pad) 
{ 
var bin=""; 
var i; 
for (i = 0; i < pad; i++) 
{ 
bin = (parseInt(dec % 2).toString()) + bin; 
dec /= 2; 
} 
return bin; 
} 
function get_float_hex(decString) 
{ 
var dec = decString; 
var sign; 
var signString; 
var decValue = parseFloat(Math.abs(decString)); 
if (decString.toString().charAt(0) == '-') 
{ 
sign = 1; 
signString = "1"; 
} 
else 
{ 
sign = 0; 
signString = "0"; 
} 
if (decValue==0) 
{ 
fraction = 0; 
exponent = 0; 
} 
else 
{ 
var exponent = 127; 
if (decValue>=2) 
{ 
while (decValue>=2) 
{ 
exponent++; 
decValue /= 2; 
} 
} 
else if (decValue<1) 
{ 
while (decValue < 1) 
{ 
exponent--; 
decValue *= 2; 
if (exponent ==0) 
break; 
} 
} 
if (exponent!=0) decValue-=1; else decValue /= 2; } 
var fractionString = DecToBinTail(decValue, 23); 
var exponentString = DecToBinHead(exponent, 8); 
return Right('00000000'+parseInt(signString + exponentString + fractionString, 2).toString(16),8);
Javascript 相关文章推荐
jquery maxlength使用说明
Sep 09 Javascript
UI Events 用户界面事件
Jun 27 Javascript
jCallout 轻松实现气泡提示功能
Sep 22 Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 Javascript
如何使用jquery easyui创建标签组件
Nov 18 Javascript
浅谈JS之iframe中的窗口
Sep 13 Javascript
原生js实现回复评论功能
Jan 18 Javascript
d3.js入门教程之数据绑定详解
Apr 28 Javascript
jquery-file-upload 文件上传带进度条效果
Nov 21 jQuery
浅析Vue实例以及生命周期
Aug 14 Javascript
vue2.0 解决抽取公用js的问题
Jul 31 Javascript
React冒泡和阻止冒泡的应用详解
Aug 18 Javascript
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 #Javascript
js动态设置div的值下例子
Oct 29 #Javascript
Jquery 复选框取值兼容FF和IE8(测试有效)
Oct 29 #Javascript
Js获取数组最大和最小值示例代码
Oct 29 #Javascript
js 遍历json返回的map内容示例代码
Oct 29 #Javascript
jQuery实现公告文字左右滚动的实例代码
Oct 29 #Javascript
javascript查找字符串中出现最多的字符和次数的小例子
Oct 29 #Javascript
You might like
PHP define函数的使用说明
2008/08/27 PHP
php 采集书并合成txt格式的实现代码
2009/03/01 PHP
php面向对象全攻略 (六)__set() __get() __isset() __unset()的用法
2009/09/30 PHP
PHP批量检测并去除文件BOM头代码实例
2014/05/08 PHP
php遍历删除整个目录及文件的方法
2015/03/13 PHP
thinkPHP商城公告功能开发问题分析
2016/12/01 PHP
浅谈Yii乐观锁的使用及原理
2017/07/25 PHP
JavaScript 动态将数字金额转化为中文大写金额
2009/05/14 Javascript
javascript中万恶的function实例分析
2011/05/25 Javascript
JQuery中对Select的option项的添加、删除、取值
2013/08/25 Javascript
CheckBoxList多选样式jquery、C#获取选择项
2013/09/06 Javascript
3种不同方式的焦点图轮播特效分享
2013/10/30 Javascript
JavaScript学习笔记之取数组中最大值和最小值
2016/03/23 Javascript
BootStrap的alert提示框的关闭后再显示怎么解决
2016/05/17 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
详解vue-cli 脚手架项目-package.json
2017/07/04 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
JS与SQL方式随机生成高强度密码示例
2018/12/29 Javascript
JS实现求字符串中出现最多次数的字符和次数示例
2019/07/05 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
pymssql ntext字段调用问题解决方法
2008/12/17 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Python中Random和Math模块学习笔记
2015/05/18 Python
Python机器学习之scikit-learn库中KNN算法的封装与使用方法
2018/12/14 Python
Python定义一个函数的方法
2020/06/15 Python
Python3爬虫中Selenium的用法详解
2020/07/10 Python
美国皮靴公司自1863年:The Frye Company
2016/11/30 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
行政管理人员精品工作推荐信
2013/11/04 职场文书
法学个人求职信范文
2014/01/27 职场文书
医院搬迁方案
2014/06/14 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
同学聚会邀请函
2015/01/30 职场文书
Python获取百度热搜的完整代码
2021/04/07 Python
浅谈Go语言多态的实现与interface使用
2021/06/16 Golang
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python