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 相关文章推荐
JavaScript中原型和原型链详解
Feb 11 Javascript
JS实现黑色风格的网页TAB选项卡效果代码
Oct 09 Javascript
浅析jQuery Ajax请求参数和返回数据的处理
Feb 24 Javascript
简单实现的JQuery文本框水印插件
Jun 14 Javascript
js实现移动端轮播图效果
Dec 09 Javascript
Vue利用canvas实现移动端手写板的方法
May 03 Javascript
layui从数据库中获取复选框的值并默认选中方法
Aug 15 Javascript
React中阻止事件冒泡的问题详析
Apr 12 Javascript
Vue注册组件命名时不能用大写的原因浅析
Apr 25 Javascript
js实现简易计算器功能
Oct 18 Javascript
es6 for循环中let和var区别详解
Jan 12 Javascript
VUE使用 wx-open-launch-app 组件开发微信打开APP功能
Aug 11 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
利用discuz自带通行证整合dedecms的方法以及文件下载
2007/03/06 PHP
php 数组使用详解 推荐
2011/06/02 PHP
Laravel 5框架学习之模型、控制器、视图基础流程
2015/04/08 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
使用prototype.js进行异步操作
2007/02/07 Javascript
js css样式操作代码(批量操作)
2009/10/09 Javascript
关于JS判断图片是否加载完成且获取图片宽度的方法
2013/04/09 Javascript
解析Jquery取得iframe中元素的几种方法
2013/07/04 Javascript
JS小游戏之极速快跑源码详解
2014/09/25 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
浅析JS原型继承与类的继承
2016/04/07 Javascript
jQuery select自动选中功能实现方法分析
2016/11/28 Javascript
js正则表达式最长匹配(贪婪匹配)和最短匹配(懒惰匹配)用法分析
2016/12/27 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
JavaScript callback回调函数用法实例分析
2018/05/08 Javascript
微信小程序实现自定义picker选择器弹窗内容
2020/05/26 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
vue项目中自定义video视频控制条的实现代码
2020/04/26 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[02:00]DAC2018主宣传片——龙征四海,剑问东方
2018/03/20 DOTA
Python统计日志中每个IP出现次数的方法
2015/07/06 Python
Python的Django框架安装全攻略
2015/07/15 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
对python指数、幂数拟合curve_fit详解
2018/12/29 Python
python3中使用__slots__限定实例属性操作分析
2020/02/14 Python
CSS3 简写animation
2012/05/10 HTML / CSS
美国最大的万圣节服装网站:HalloweenCostumes.com
2017/10/12 全球购物
秸秆管理实施方案
2014/03/15 职场文书
个人社会实践自我鉴定
2014/03/24 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书
支部组织生活会方案
2014/06/10 职场文书
加强作风建设心得体会
2014/10/22 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2016学习依法治国心得体会
2016/01/15 职场文书