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 相关文章推荐
使两个iframe的高度与内容自适应,且相等
Nov 20 Javascript
Prototype Number对象 学习
Jul 19 Javascript
一个简单的js渐显(fadeIn)渐隐(fadeOut)类
Jun 19 Javascript
弹出最简单的模式化遮罩层的js代码
Dec 04 Javascript
详解JavaScript中的4种类型识别方法
Sep 14 Javascript
js正则表达式replace替换变量方法
May 21 Javascript
利用Node.js制作爬取大众点评的爬虫
Sep 22 Javascript
AngularJS中的Promise详细介绍及实例代码
Dec 13 Javascript
ReactNative 之FlatList使用及踩坑封装总结
Nov 29 Javascript
mpvue中配置vuex并持久化到本地Storage图文教程解析
Mar 15 Javascript
深入浅析Vue中的 computed 和 watch
Jun 06 Javascript
使用react context 实现vue插槽slot功能
Jul 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 preg_filter执行一个正则表达式搜索和替换
2012/02/27 PHP
二进制交叉权限微型php类分享
2014/02/07 PHP
Zend Framework实现Zend_View集成Smarty模板系统的方法
2016/03/05 PHP
Laravel框架创建路由的方法详解
2019/09/04 PHP
Laravel 实现Eloquent模型分组查询并返回每个分组的数量 groupBy()
2019/10/23 PHP
Aster vs KG BO3 第三场2.18
2021/03/10 DOTA
推荐20家国外的脚本下载网站
2011/04/28 Javascript
jquery.bgiframe.js在IE9下提示INVALID_CHARACTER_ERR错误
2013/01/11 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
javascript 对象数组根据对象object key的值排序
2015/03/09 Javascript
JavaScript数组的栈方法与队列方法详解
2016/05/26 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
KnockoutJS 3.X API 第四章之表单submit、enable、disable绑定
2016/10/10 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
webpack构建换肤功能的思路详解
2017/11/27 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
vuex 解决报错this.$store.commit is not a function的方法
2018/12/17 Javascript
教你完全理解ReentrantLock重入锁
2019/06/03 Javascript
js中addEventListener()与removeEventListener()用法案例分析
2020/03/02 Javascript
Node.js API详解之 module模块用法实例分析
2020/05/13 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
python利用拉链法实现字典方法示例
2017/03/25 Python
Python向MySQL批量插数据的实例讲解
2018/03/31 Python
python微元法计算函数曲线长度的方法
2018/11/08 Python
Django 数据库同步操作技巧详解
2019/07/19 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
Python小白垃圾回收机制入门
2020/06/09 Python
python中什么是面向对象
2020/06/11 Python
pytorch SENet实现案例
2020/06/24 Python
法国春天百货官网:Printemps.com
2020/06/29 全球购物
产品开发计划书
2014/04/27 职场文书
党的群众路线教育实践活动查摆剖析材料
2014/10/10 职场文书
民主生活会发言材料
2014/10/20 职场文书
考试作弊检讨书
2015/01/27 职场文书
我们的节日端午节活动总结
2015/02/11 职场文书
如何使用Tkinter进行窗口的管理与设置
2021/06/30 Python