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得到font-size属性值实现代码
Sep 30 Javascript
javascript eval(func())使用示例
Dec 05 Javascript
jQuery插件StickUp实现网页导航置顶
Apr 12 Javascript
js一维数组、多维数组和对象的混合使用方法
Apr 03 Javascript
angularjs指令之绑定策略(@、=、&amp;)
Apr 13 Javascript
微信小程序 地图map实例详解
Jun 07 Javascript
react 父组件与子组件之间的值传递的方法
Sep 14 Javascript
详解如何使用babel进行es6文件的编译
May 29 Javascript
浅谈express.js框架中间件(middleware)
Apr 07 Javascript
小程序封装路由文件和路由方法(5种全解析)
May 26 Javascript
Swiper.js实现移动端元素左右滑动
Sep 08 Javascript
小程序点击图片实现png转jpg
Oct 22 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使用glob函数遍历目录或文件夹的方法
2014/12/16 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
thinkPHP中钩子的使用方法实例分析
2017/11/16 PHP
php在windows环境下获得cpu内存实时使用率(推荐)
2018/02/08 PHP
PHP设计模式之装饰器(装饰者)模式(Decorator)入门与应用详解
2019/12/13 PHP
php利用ZipArchive类操作文件的实例
2020/01/21 PHP
Nigma vs AM BO3 第一场2.13
2021/03/10 DOTA
提高 DHTML 页面性能
2006/12/25 Javascript
扩展javascript的Date方法实现代码(prototype)
2010/11/20 Javascript
js判断输入是否为数字的具体实例
2013/08/03 Javascript
JavaScript将数据转换成整数的方法
2014/01/04 Javascript
JavaScript 实现鼠标拖动元素实例代码
2014/02/24 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
JQuery EasyUI 加载两次url的原因分析及解决方案
2014/08/18 Javascript
javascript基本类型详解
2014/11/28 Javascript
KVM虚拟化技术之使用Qemu-kvm创建和管理虚拟机的方法
2016/10/05 Javascript
详解前端自动化工具gulp自动添加版本号
2016/12/20 Javascript
Bootstrap禁用响应式布局的实现方法
2017/03/09 Javascript
JS请求servlet功能示例
2017/06/01 Javascript
JavaScript实现简单评论功能
2017/08/17 Javascript
element ui table 增加筛选的方法示例
2018/11/02 Javascript
微信小程序使用map组件实现路线规划功能示例
2019/01/22 Javascript
微信小程序日历弹窗选择器代码实例
2019/05/09 Javascript
[03:59]5分钟带你了解什么是DOTA2(第二期)
2017/02/07 DOTA
初学Python实用技巧两则
2014/08/29 Python
Linux下使用python调用top命令获得CPU利用率
2015/03/10 Python
Python中tell()方法的使用详解
2015/05/24 Python
10招!看骨灰级Pythoner玩转Python的方法
2019/04/15 Python
Python API 操作Hadoop hdfs详解
2020/06/06 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Python虚拟环境的创建和使用详解
2020/09/07 Python
医务人员竞聘职务自我评价分享
2013/11/08 职场文书
银行员工辞职信范文
2014/01/20 职场文书
加油口号大全
2014/06/13 职场文书
2015年国培研修感言
2015/08/01 职场文书
2016年毕业实习心得体会范文
2015/10/09 职场文书