javascript 浮点数-JavaScript实现浮点数转换为十六进制补码

2023-08-24 0 7,839 百度已收录

JavaScript实现点数转十六进制补码字符

最近一个嵌入式项目需要WEB功能,所以想到了使用HTML+JavaScript来实现一些参数配置功能。 参数由JavaScript以16位补码数据生成,通过POST提交给单片机,然后直接使用,从而充分利用浏览器的估算能力。

由于JavaScript对浮点数的支持非常弱javascript 浮点数,直接使用浮点数转换为十六进制补码的功能无法实现通常用C语言实现的4字节存储表示。 经过查找,没有找到相关的功能码。 Node.js的Buffer类可以实现这个功能,但是没有办法使用(单片机存储空间有限),也没有找到如何实现的方法(我不知道)不明白)。

例如:

javascript 浮点数-JavaScript实现浮点数转换为十六进制补码

123.456==》0x42F6E979 在C语言中,直接将浮点数转换为unsigned intjavascript 浮点数,然后输出为十六进制数就足够了,但在JavaScript中实现起来就没那么简单了。

javascript 浮点数-JavaScript实现浮点数转换为十六进制补码

幸运的是,我在网上找到了一份用C#实现的IEEE754标准浮点数转换代码(IEEE754浮点数转换器(C#实现)点击打开链接),并通过将此代码转换为JavaScript完成了这项工作。 因此,将代码贴出来分享一下。

另外,我只实现了转为十六进制,并没有实现C#代码中的反转(反转代码)。

javascript 浮点数-JavaScript实现浮点数转换为十六进制补码

通过如下代码可以实现如下:

get_float_hex(123.456)==>42F6E979

function DecToBinTail(dec, pad)
{
    var bin = "";
    var i;
    for (i = 0; i = 1)
        {
            dec -= 1;
            bin += "1";
        }
        else
        {
            bin += "0";
        }
    }
    return bin;
}
function DecToBinHead(dec,pad)
{
    var bin="";
    var i;
    for (i = 0; i =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);
}

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript 浮点数-JavaScript实现浮点数转换为十六进制补码 https://www.wkzy.net/game/149017.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务