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 相关文章推荐
window.open以post方式将内容提交到新窗口
Dec 26 Javascript
分享JavaScript获取网页关闭与取消关闭的事件
Dec 13 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
Oct 17 Javascript
JavaScript定义类和对象的方法
Nov 26 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
Sep 16 Javascript
JS截取字符串实例详解
Nov 24 Javascript
微信公众平台开发教程(四) 实例入门:机器人回复(附源码)
Dec 02 Javascript
Angularjs通过指令监听ng-repeat渲染完成后执行脚本的方法
Dec 31 Javascript
Angularjs实现页面模板清除的方法
Jul 20 Javascript
React组件设计模式之组合组件应用实例分析
Apr 29 Javascript
js 获取扫码枪输入数据的方法
Jun 10 Javascript
微信小程序之高德地图多点路线规划过程示例详解
Jan 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删除文本文件中重复行的方法
2015/04/28 PHP
joomla数据库操作示例代码
2016/01/06 PHP
php写app用的框架整理
2019/09/29 PHP
nodejs中exports与module.exports的区别详细介绍
2013/01/14 NodeJs
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
Javascript动态创建div的方法
2015/02/09 Javascript
详解JavaScript数组的操作大全
2015/10/19 Javascript
Bootstrap精简教程
2015/11/27 Javascript
详解JavaScript的AngularJS框架中的表达式与指令
2016/03/05 Javascript
node.js 抓取代理ip实例代码
2017/04/30 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
详解在vue-cli项目中使用mockjs(请求数据删除数据)
2017/10/23 Javascript
vue的传参方式汇总和router使用技巧
2018/05/22 Javascript
JS通过ajax + 多列布局 + 自动加载实现瀑布流效果
2019/05/30 Javascript
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
vue学习笔记之给组件绑定原生事件操作示例
2020/02/27 Javascript
在Python 3中实现类型检查器的简单方法
2015/07/03 Python
深入解析Python中的变量和赋值运算符
2015/10/12 Python
使用pytorch进行图像的顺序读取方法
2018/07/27 Python
Python中字符串与编码示例代码
2019/05/20 Python
Python二维码生成识别实例详解
2019/07/16 Python
pycharm显示远程图片的实现
2019/11/04 Python
python interpolate插值实例
2020/07/06 Python
python脚本定时发送邮件
2020/12/22 Python
Python页面加载的等待方式总结
2021/02/28 Python
韩国现代百货官网:Hmall
2018/03/21 全球购物
高级护理实习生自荐信
2013/09/28 职场文书
大学毕业感言一句话
2014/02/06 职场文书
小学少先队活动方案
2014/02/18 职场文书
拓展训练激励口号
2014/06/17 职场文书
公务员年度考核评语
2014/12/31 职场文书
企业介绍信范文
2015/01/30 职场文书
退休欢送会主持词
2015/07/01 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
助学金申请书该怎么写?
2019/07/16 职场文书
Redis三种集群模式详解
2021/10/05 Redis