【问题标题】:From hex to float - Javascript [duplicate]从十六进制到浮点数 - Javascript [重复]
【发布时间】:2018-01-08 13:30:00
【问题描述】:

我正在尝试在 Javascript 中将十六进制字符串转换为浮点数。

假设我有十六进制字符串“0082d241”。使用this online converter 并选择交换字节序,正确的浮点值为26,3135。

我知道这是正确答案,因为它来自 TMP36 传感器。

我尝试了一些我在 SO 上找到的其他示例,例如 Converting hexadecimal to float in javascript,但没有一个有效。

【问题讨论】:

    标签: javascript lorawan


    【解决方案1】:

    第一步是交换字节顺序,使用您展示的page 上的源代码。

    然后你可以将十六进制字符串转换为浮点值。

    function flipHexString(hexValue, hexDigits) {
      var h = hexValue.substr(0, 2);
      for (var i = 0; i < hexDigits; ++i) {
        h += hexValue.substr(2 + (hexDigits - 1 - i) * 2, 2);
      }
      return h;
    }
    
    
    function hexToFloat(hex) {
      var s = hex >> 31 ? -1 : 1;
      var e = (hex >> 23) & 0xFF;
      return s * (hex & 0x7fffff | 0x800000) * 1.0 / Math.pow(2, 23) * Math.pow(2, (e - 127))
    }
    
    console.log(hexToFloat(flipHexString("0x0082d241", 8)));
    console.log(hexToFloat(flipHexString("0x5d7e2842", 8)));

    【讨论】:

    • 很抱歉响应迟了,但这总是返回相同的值:26.3134765625 无论测量值是多少。 (我在代码的最后一行更改了“0x0082d241””
    • @kots 你的代码一定有问题。我在我的答案中添加了一个工作代码 sn-p,以向您展示两个不同十六进制字符串的结果
    • 还是有问题。也许是因为我将它与节点红色一起使用?我是这样使用它的:ms = msg.payload.data;函数 flipHexString(hexValue, hexDigits) { var h = hexValue.substr(0, 2); for (var i = 0; i > 31 ? -1:1; var e = (hex >> 23) & 0xFF;返回 s * (hex & 0x7fffff | 0x800000) * 1.0 / Math.pow(2, 23) * Math.pow(2, (e - 127)); } msg.payload=hexToFloat(flipHexString(ms, 8));返回味精; @Teh
    • @kots 对我来说看起来不错,您应该逐步调试您在 msg.payload.data 中获得的输入以及返回的内容,直到您发现问题所在
    • 代码现在更改了值,但格式错误。它应该是 26.2251 并且是 5.45211154 e^-19 。
    猜你喜欢
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 2011-12-05
    • 1970-01-01
    • 2014-03-01
    • 1970-01-01
    • 2014-11-18
    • 2018-08-19
    相关资源
    最近更新 更多