最近一个嵌入式项目需要WEB功能,所以想到了使用HTML+JavaScript来实现一些参数配置功能。 参数由JavaScript以16位补码数据生成,通过POST提交给单片机,然后直接使用,从而充分利用浏览器的估算能力。
由于JavaScript对浮点数的支持非常弱javascript 浮点数,直接使用浮点数转换为十六进制补码的功能无法实现通常用C语言实现的4字节存储表示。 经过查找,没有找到相关的功能码。 Node.js的Buffer类可以实现这个功能,但是没有办法使用(单片机存储空间有限),也没有找到如何实现的方法(我不知道)不明白)。
例如:
123.456==》0x42F6E979 在C语言中,直接将浮点数转换为unsigned intjavascript 浮点数,然后输出为十六进制数就足够了,但在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 = 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); }