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实现一些常用软件的下载导航
Aug 03 Javascript
基于Jquery制作的幻灯片图集效果打包下载
Feb 12 Javascript
jQuery事件 delegate()使用方法介绍
Oct 30 Javascript
js自动生成的元素与页面原有元素发生堆叠的解决方法
Oct 24 Javascript
js 判断图片是否加载完以及实现图片的预下载
Aug 14 Javascript
javascript图片切换综合实例(循环切换、顺序切换)
Jan 13 Javascript
jquery跟随屏幕滚动效果的实现代码
Apr 13 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
May 17 Javascript
Html中 IFrame的用法及注意点
Dec 22 Javascript
bootstrap选项卡使用方法解析
Jan 11 Javascript
微信小程序实现Session功能及无法获取session问题的解决方法
May 07 Javascript
详解vue v-model
Aug 31 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! Passport 通行证整合
2008/03/27 PHP
php disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP实现递归无限级分类
2015/10/22 PHP
php获取当前月与上个月月初及月末时间戳的方法
2016/12/05 PHP
PHP设计模式(九)外观模式Facade实例详解【结构型】
2020/05/02 PHP
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
2007/08/19 Javascript
js操作textarea 常用方法总结
2012/12/03 Javascript
js禁止document element对象选中文本实现代码
2013/03/21 Javascript
js style动态设置table高度
2014/10/21 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
基于jQuery实现Accordion手风琴自定义插件
2020/10/13 Javascript
Vue网页html转换PDF(最低兼容ie10)的思路详解
2017/08/24 Javascript
angularJs中$http获取后台数据的实例讲解
2018/08/08 Javascript
Angular8 Http拦截器简单使用教程
2019/08/20 Javascript
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
详解vue-flickity的fullScreen功能实现
2020/04/07 Javascript
微信小程序 接入腾讯地图的两种写法
2021/01/12 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
详解python数据结构和算法
2019/04/18 Python
Python Django给admin添加Action的方法实例详解
2019/04/29 Python
Python reduce函数作用及实例解析
2020/05/08 Python
如何基于Python爬取隐秘的角落评论
2020/07/02 Python
python读取图片颜色值并生成excel像素画的方法实例
2021/02/19 Python
纯CSS3代码实现文字描边
2016/04/25 HTML / CSS
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
外企办公室竞聘演讲稿
2013/12/29 职场文书
《难忘的泼水节》教学反思
2014/02/27 职场文书
生态养殖创业计划书
2014/05/06 职场文书
建筑专业毕业生自荐信
2014/05/25 职场文书
门店业绩提升方案
2014/06/08 职场文书
战略合作意向书
2014/07/29 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
2015年幼儿园卫生保健工作总结
2015/05/12 职场文书
导游词之西安骊山
2019/12/03 职场文书
Nginx配置并兼容HTTP实现代码解析
2021/03/31 Servers