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中暂停功能的实现代码
Mar 04 Javascript
js字符编码函数区别分析
Jun 05 Javascript
超越Jquery_01_isPlainObject分析与重构
Oct 20 Javascript
jquery 查找select ,并触发事件的实现代码
Mar 30 Javascript
js中通过父级进行查找定位元素
Jun 15 Javascript
alert出数组中的随即值代码
Sep 25 Javascript
使用yeoman构建angular应用的方法
Aug 14 Javascript
js实现鼠标拖拽缩放div实例代码
Mar 25 Javascript
JavaScript强制类型转换和隐式类型转换操作示例
May 01 Javascript
微信小程序实现文件、图片上传功能
Aug 18 Javascript
js计时事件实现圆形时钟
Mar 25 Javascript
Vue 同步异步存值取值实现案例
Aug 05 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彩蛋信息介绍和阻止泄漏的方法(隐藏功能)
2014/08/06 PHP
PHP实现HTML生成PDF文件的方法
2014/11/07 PHP
js 多浏览器分别判断代码
2010/04/01 Javascript
lyhucSelect基于Jquery的Select数据联动插件
2011/03/29 Javascript
js常用代码段整理
2011/11/30 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
JavaScript中instanceof运算符的用法总结
2013/11/19 Javascript
js改变鼠标的形状和样式的方法
2014/03/31 Javascript
jQuery操作DOM之获取表单控件的值
2015/01/23 Javascript
HTML5+jQuery插件Quicksand实现超酷的星际争霸2兵种分类展示效果(附demo源码下载)
2016/05/25 Javascript
第一次接触神奇的Bootstrap菜单和导航
2016/08/01 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
Javascript 判断两个IP是否在同一网段实例代码
2016/11/28 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
vue如何集成raphael.js中国地图的方法示例
2017/08/15 Javascript
JavaScript-定时器0~9抽奖系统详解(代码)
2017/08/16 Javascript
Three.js基础学习之场景对象
2017/09/27 Javascript
微信小程序实现的自定义分享功能示例
2019/02/12 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
python算法演练_One Rule 算法(详解)
2017/05/17 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
Python2和Python3.6环境解决共存问题
2018/11/09 Python
python用win32gui遍历窗口并设置窗口位置的方法
2019/07/26 Python
如何把外网python虚拟环境迁移到内网
2020/05/18 Python
美国网上购买眼镜:Eyeconic
2017/07/29 全球购物
皇家阿尔伯特瓷器美国官网:Royal Albert美国
2020/02/16 全球购物
俄罗斯便宜的在线服装商店:GroupPrice
2020/04/10 全球购物
企业标语大全
2014/07/01 职场文书
2014年人大工作总结
2014/12/10 职场文书
广告业务员岗位职责
2015/02/13 职场文书
英语投诉信范文
2015/07/03 职场文书
聘任书格式及范文
2015/09/21 职场文书
SpringMVC 整合SSM框架详解
2021/08/30 Java/Android
浅谈Node的内存泄露问题
2022/05/06 NodeJs