node.js 四个字节的十六进制数转换成双精度浮点数

本文介绍了一种将从UDP接收的Modbus数据中解析出的十六进制字符串转换为单精度和双精度浮点数的方法。通过JavaScript实现,详细展示了如何将十六进制数据转换为二进制字符串,再进一步解析为浮点数的阶码和尾数,最后计算出实际的浮点数值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

由于JavaScript只有num类型,所以进制转换中单精度和双精度浮点数没法直接转换,下面是根据公式计算的,原理网上有。背景是我通过udp接收终端远程传输的modbus的数据,解析出来的十六进制数据需转换成单精度和双精度浮点数。
var string = [‘4’,’0’,’7’,’e’,’e’,’6’,’a’,’1’,’5’,’7’,’6’,’c’,’0’,’0’,’0’,’0’];
//先转换成二进制字符串
var num;
function changeToHex(n){
num = parseInt(n,16).toString(2);
num = (‘000’+num).slice(-4);
return num;
console.log(num);
}

function changeToNum(pendingString){
var douString = ”;
for (var i = 0; i < string.length; i++) {
changeToHex(string[i]);
douString = douString + num;
}
console.log(douString);
//阶码,尾数
var orderCode = douString.substring(1,12);
var tailNumber = ‘1’ + douString.substring(12);
console.log(orderCode);
console.log(tailNumber);
//指数=解码-1023,即为偏移位数
var index = parseInt(orderCode,2) - 1023;
//整数部分二进制integerDou 小数二进制 decimalDou
console.log(typeof tailNumber);
var integerDou = tailNumber.substring(0,index+1);
var decimalDou = tailNumber.substring(index+1);
console.log(integerDou);
console.log(decimalDou);
//根据公式分别转换成小数和实数部分,相加都totalNum
var integerNum = 0;
var decimalNum = 0;
var totalNum = 0;
for (var i = 0; i < integerDou.length; i++) {
integerNum = integerNum + integerDou[i]*Math.pow(2,index - i);
}
console.log(integerNum);
for (var i = 0; i < decimalDou.length; i++) {
decimalNum = decimalNum + decimalDou[i]*Math.pow(2,-1 - i);
}
console.log(decimalNum);
totalNum = integerNum + decimalNum;
console.log(totalNum);
}
changeToNum(string);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值