天天看点

JS 实现十六进制转浮点数

// 16 进制转浮点数
function HexToSingle(t) {
	t = t.replace(/\s+/g, "");
	if (t == "") {
		return "";
	}
	if (t == "00000000") {
		return "0";
	}
	if ((t.length > 8) || (isNaN(parseInt(t, 16)))) {
		return "Error";
	}
	if (t.length < 8) {
		t = FillString(t, "0", 8, true);
	}
	t = parseInt(t, 16).toString(2);
	t = 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." + 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;
}

function 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;
}