美文网首页
十六进制转浮点数

十六进制转浮点数

作者: Ths | 来源:发表于2022-05-23 14:34 被阅读0次

    KK KK KK KK卡路里

    低位在前,高位在后。浮点数遵循 IEEE R32.24,单位为千卡。00003041

    转换方法如下:

    HexToSingle(t) {
            if (t === "") {
                return "";
            }
            if (t == "00000000") {
                return "0";
            }
            if ((t.length > 8) || (isNaN(parseInt(t, 16)))) {
                return "Error";
            }
            if (t.length < 8) {
                t = this.FillString(t, "0", 8, true);
            }
            t = parseInt(t, 16).toString(2);
            t = this.FillString(t, "0", 32, true);
            var s = t.substring(0, 1);
            var e = t.substring(1, 9);
            var m = t.substring(9);
            e = parseInt(e, 2) - 127;
            m = "1" + m;
            if (e >= 0) {
                m = m.substr(0, e + 1) + "." + m.substring(e + 1);
            }
             else {
                m = "0." + this.FillString(m, "0", m.length - e - 1, true);
            }
            if (m.indexOf(".") == -1) {
                m = m + ".0";
            }
            var a = m.split(".");
            var mi = parseInt(a[0], 2);
            var mf = 0;
            for (var i = 0; i < a[1].length; i++) {
                mf += parseFloat(a[1].charAt(i)) * Math.pow(2, -(i + 1));
            }
            m = parseInt(mi) + parseFloat(mf);
            if (s == 1) {
                m = 0 - m;
            }
            return m;
        },
        FillString(t, c, n, b) {
            if ((t === "") || (c.length != 1) || (n <= t.length)) {
                return t;
            }
            var l = t.length;
            for (var i = 0; i < n - l; i++) {
                if (b === true) {
                    t = c + t;
                } else {
                    t += c;
                }
            }
            return t;
        }
    

    相关文章

      网友评论

          本文标题:十六进制转浮点数

          本文链接:https://www.haomeiwen.com/subject/tzprprtx.html