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 相关文章推荐
多广告投放代码 推荐
Nov 13 Javascript
自己动手制作jquery插件之自动添加删除行的实现
Oct 13 Javascript
jquery 跳到顶部和底部动画2句代码简单实现
Jul 18 Javascript
javascript检查浏览器是否支持flash的实现代码
Aug 14 Javascript
Node.js的Web模板引擎ejs的入门使用教程
Jun 06 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
微信小程序实现单选功能
Oct 30 Javascript
Vue.js实现大转盘抽奖总结及实现思路
Oct 09 Javascript
Element Carousel 走马灯的具体实现
Jul 26 Javascript
微信小程序实现自定义动画弹框/提示框的方法实例
Nov 06 Javascript
如何理解Vue简单状态管理之store模式
May 15 Vue.js
JS 基本概念详细介绍
Oct 16 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
smarty中常用方法实例总结
2015/08/07 PHP
asp函数split()对应php函数explode()
2019/02/27 PHP
php使用lua+redis实现限流,计数器模式,令牌桶模式
2019/04/04 PHP
IE中createElement需要注意的一个问题
2010/07/13 Javascript
js下写一个事件队列操作函数
2010/07/19 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
jquery 学习之二 属性相关
2010/11/23 Javascript
js 获取计算后的样式写法及注意事项
2013/02/25 Javascript
js中的数组Array定义与sort方法使用示例
2013/08/29 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
jquery实现隐藏在左侧的弹性弹出菜单效果
2015/09/18 Javascript
js如何实现淡入淡出效果
2020/11/18 Javascript
JavaScript实现数据类型的相互转换
2016/03/06 Javascript
JQuery DIV 动态隐藏和显示的方法
2016/06/23 Javascript
微信小程序 icon组件详细及实例代码
2016/10/25 Javascript
Node.js中process模块常用的属性和方法
2016/12/13 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
JavaScript实现随机数生成器(去重)
2017/10/13 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
详解Vue This$Store总结
2018/12/17 Javascript
jQuery实现的隔行变色功能【案例】
2019/02/18 jQuery
微信小程序 组件的外部样式externalClasses使用详解
2019/09/06 Javascript
[02:51]DOTA2英雄基础教程 艾欧
2014/01/13 DOTA
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python开发准备工作之配置虚拟环境(非常重要)
2019/02/11 Python
pytorch torch.expand和torch.repeat的区别详解
2019/11/05 Python
使用PyCharm安装pytest及requests的问题
2020/07/31 Python
用python进行视频剪辑
2020/11/02 Python
全球性的众包图形设计市场:DesignCrowd
2021/02/02 全球购物
网络工程师面试(三木通信技术有限公司)
2013/06/05 面试题
党校学习思想汇报
2014/01/06 职场文书
2014年教师教学工作总结
2014/11/08 职场文书
求职自我评价怎么写
2015/03/09 职场文书
元素水平垂直居中的方式
2021/03/31 HTML / CSS
Zabbix6通过ODBC方式监控Oracle 19C的详细过程
2022/09/23 Servers