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 获取URL参数的插件
Mar 04 Javascript
jquery 学习笔记一
Apr 07 Javascript
js拦截alert对话框另类应用
Jan 16 Javascript
自动最大化窗口的Javascript代码
May 22 Javascript
子页向父页传值示例
Nov 27 Javascript
Javascript高级技巧分享
Feb 25 Javascript
jquery+html5制作超酷的圆盘时钟表
Apr 14 Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
Feb 10 Javascript
基于vue1和vue2获取dom元素的方法
Mar 17 Javascript
使用electron制作满屏心特效的示例代码
Nov 27 Javascript
Vue多组件仓库开发与发布详解
Feb 28 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实现文件安全下载
2006/10/09 PHP
信用卡效验程序
2006/10/09 PHP
PHP中设置时区,记录日志文件的实现代码
2013/01/07 PHP
PHP语法自动检查的Vim插件
2014/08/11 PHP
ThinkPHP3.2.2的插件控制器功能
2015/03/05 PHP
在PHP语言中使用JSON和将json还原成数组的方法
2016/07/19 PHP
php自定义扩展名获取函数示例
2016/12/12 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
2018/10/18 PHP
关于可运行代码无法正常执行的使用说明
2010/05/13 Javascript
javascript中Date对象的getDay方法使用指南
2014/12/22 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
JS实现超过长度限制后自动跳转下一款文本框的方法
2015/02/23 Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
2015/06/24 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
基于jQuery Easyui实现登陆框界面
2017/07/10 jQuery
vue 自定义组件 v-model双向绑定、 父子组件同步通信的多种写法
2017/11/27 Javascript
浅谈vue的props,data,computed变化对组件更新的影响
2018/01/16 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
新手该如何学python怎么学好python?
2008/10/07 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
padas 生成excel 增加sheet表的实例
2018/12/11 Python
python三方库之requests的快速上手
2019/03/04 Python
python处理document文档保留原样式
2019/09/23 Python
Python的几种主动结束程序方式
2019/11/22 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python zip,lambda,map函数代码实例
2020/04/04 Python
HTML+CSS3模拟心的跳动实例代码
2017/09/05 HTML / CSS
运动会解说词100字
2014/01/31 职场文书
宿舍违规用电检讨书
2014/02/16 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
交通事故调解协议书
2015/05/20 职场文书
纪律委员竞选稿
2015/11/19 职场文书
人力资源部工作计划
2019/05/14 职场文书
Java Dubbo框架知识点梳理
2021/06/26 Java/Android