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 相关文章推荐
Jquery拖拽并简单保存的实现代码
Nov 28 Javascript
再论Javascript下字符串连接的性能
Mar 05 Javascript
javascript中不等于的代码是什么怎么写
Dec 29 Javascript
jQuery实现伸展与合拢panel的方法
Apr 30 Javascript
JavaScript实现的Tween算法及缓冲特效实例代码
Nov 03 Javascript
深入理解JS正则表达式---分组
Jul 18 Javascript
javaScript 事件绑定、事件冒泡、事件捕获和事件执行顺序整理总结
Oct 10 Javascript
Vue2.0父组件与子组件之间的事件发射与接收实例代码
Sep 19 Javascript
gulp安装以及打包合并的方法教程
Nov 19 Javascript
vue实现新闻展示页的步骤详解
Apr 11 Javascript
JS使用new操作符创建对象的方法分析
May 30 Javascript
layui table复选框禁止某几条勾选的实例
Sep 20 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制作图型计数器的例子
2006/10/09 PHP
ThinkPHP进程计数类Process用法实例详解
2015/09/25 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php解析xml 的四种简单方法(附实例)
2016/07/11 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
smarty模板的使用方法实例分析
2019/09/18 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
项目实践之javascript技巧
2007/12/06 Javascript
jquery map方法使用示例
2014/04/23 Javascript
jquery操作select大全
2014/04/25 Javascript
jsPDF导出pdf示例
2014/05/02 Javascript
jQuery简单实现仿京东商城的左侧菜单效果代码
2015/09/09 Javascript
jQuery的ready方法实现原理分析
2016/10/26 Javascript
Angularjs使用ng-repeat中$even和$odd属性的注意事项
2016/12/31 Javascript
详解Vue 方法与事件处理器
2017/06/20 Javascript
Vue中使用vux配置代码详解
2018/09/16 Javascript
nodejs使用async模块同步执行的方法
2019/03/02 NodeJs
解决vue 使用setTimeout,离开当前路由setTimeout未销毁的问题
2020/07/21 Javascript
js实现轮播图效果 纯js实现图片自动切换
2020/08/09 Javascript
JS highcharts实现动态曲线代码示例
2020/10/16 Javascript
Python深入学习之装饰器
2014/08/31 Python
python标准算法实现数组全排列的方法
2015/03/17 Python
Python基于Tkinter的HelloWorld入门实例
2015/06/17 Python
Python多进程机制实例详解
2015/07/02 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
使用Python来做一个屏幕录制工具的操作代码
2020/01/18 Python
基于Python脚本实现邮件报警功能
2020/05/20 Python
大学生求职简历的自我评价
2013/10/21 职场文书
毕业生的自我鉴定
2013/10/29 职场文书
优秀社区干部事迹材料
2014/02/03 职场文书
婚前协议书
2014/04/15 职场文书
迎新年主持词
2015/07/06 职场文书
2016年国庆节新闻稿范文
2015/11/25 职场文书
pycharm2021激活码使用教程(永久激活亲测可用)
2021/03/30 Python
Python制作表白爱心合集
2022/01/22 Python