SOURCE

var value = 0.0;
memcpy(&value, "00", 8);


function hexToSingle(num){
	var a = num;
	var b = parseInt(a,16);
	var s = (b&0x80000000) ? -1 : 1;
	var e = (b&0x7f800000)/0x800000-127;
	var c = (b&0x7fffff)/0x800000;
	var re = s*(1+c)*Math.pow(2,e);
	return re;
}

const str = '41D90131'
var result = hexToSingle(str);// = 80.23300170898438(js浮点数可能有误差)
console.log(result);

function convertFloat(byteStr) {
        var buffer = str2ArrayBuffer(byteStr, 4);
        var dataView = new DataView(buffer, 0, 4);
        return dataView.getFloat32(0);
    }

    // 字符串转为ArrayBuffer对象,参数为字符串
    function str2ArrayBuffer(str, len) {
        var buf = new ArrayBuffer(len);
        var bufView = new Uint8Array(buf);
        for (var i = 0, strLen = str.length; i < strLen; i++) {
            bufView[i] = parseInt(str.substr(i * 2, 2), 16);
        }
        return buf;
    }

var byteStr = ["31","01","D9","41"];
var res = convertFloat(byteStr);
console.log(res);


var bytes = new Array();
bytes[0] = 49;
bytes[1] = 1;
bytes[2] = 217;
bytes[3] = 65;
function hex2float(num) {
  	//符号位
    var sign = (num & 0x80000000) ? -1 : 1;
  	//指数位
    var exponent = ((num >> 23) & 0xff) - 127;
  	//尾数位
    var mantissa = 1 + ((num & 0x7fffff) / 0x7fffff);
    return sign * mantissa * Math.pow(2, exponent);
}

//拼接为number对象
var mfloat = ((bytes[0] & 0xFF) << 24) | 
	((bytes[1] & 0xFF) << 16) | 
	((bytes[2] & 0xFF) << 8) | 
	(bytes[3] & 0xFF);

console.log(hex2float(mfloat));




function byteToString(arr) {
        if(typeof arr === 'string') {
            return arr;
        }
        var str = '',
            _arr = arr;
        for(var i = 0; i < _arr.length; i++) {
            var one = _arr[i].toString(2),
                v = one.match(/^1+?(?=0)/);
            if(v && one.length == 8) {
                var bytesLength = v[0].length;
                var store = _arr[i].toString(2).slice(7 - bytesLength);
                for(var st = 1; st < bytesLength; st++) {
                    store += _arr[st + i].toString(2).slice(2);
                }
                str += String.fromCharCode(parseInt(store, 2));
                i += bytesLength - 1;
            } else {
                str += String.fromCharCode(_arr[i]);
            }
        }
        return str;
}
var payload = [103, 101, 116 ,99, 116 ,114, 58 ,91 ,49, 44 ,50, 44, 51, 44, 52, 44, 53 ,44, 54 ,93, 10];
var result = {};
var metadata = {"category":"aaa"};

console.log(payload);
console.log(byteToString(payload));
result.auth = true;
result.sn = "1234567890";
result.category = metadata.category;

var payloadString = byteToString(payload);

if (payloadString.includes("get_coords")){
  result.sn = session.sn;
  result.category = "ELRB";
  var temp1 = payloadString.split('[');
  var temp2 = temp1[1].split(',');
  var temp3 = temp2[5].split(']');
  var shadow = {};
  shadow.Coordinates = {};
  shadow.Coordinates.x = temp2[0];
  shadow.Coordinates.y = temp2[1];
  shadow.Coordinates.z = temp2[2];
  shadow.Coordinates.rx = temp2[3];
  shadow.Coordinates.ry = temp2[4];
  shadow.Coordinates.rz = temp3[0];
  result.shadow = shadow;
  };
  


console.log(result);

//return result;



var bytes = {};
bytes[0] = 85;
bytes[1] = 18;
bytes[2] = 0;
bytes[3] = 37;//Version
bytes[4] = 1;// UserCode
bytes[5] = 66;//Power
bytes[6] = 2;
bytes[7] = 2;
bytes[8] = 50;
bytes[9] = 50;
bytes[10] = 65;
bytes[11] = 4;
bytes[12] = 9;
bytes[13] = 49;
bytes[14] = 55;
bytes[15] = 54;
bytes[16] = 53;
bytes[17] = 48;
bytes[18] = 174;
bytes[19] = 0;
bytes[21] = 14;
bytes[22] = 1;
bytes[23] = 1;
bytes[24] = 5;
bytes[25] = 19;
bytes[27] = 163;
bytes[28] = 1;

//var payload = "85,18,0,37,33,1,40,77,73,83,83,73,78,71,41,66,2,2,50,50,65,4,9,49,55,54,53,48,177,0,9,49,55,54,53,48,174,174,200,0";

var session = {};
var deviceConfig = {};
var metadata = {};
metadata.category = "BGM1";

result = decode(session,bytes,metadata,deviceConfig);
console.log(result);

function decode(session,payload,metadata,deviceConfig) {
var result = {};
console.log(payload);
result.sn = getSn(payload,6,16);
var shadow = {};
shadow.Version = payload[3].toString(16);
shadow.UserCode = payload[4];
shadow.Power = payload[5];
shadow.ModelCode = payload[6].toString(16);
shadow.TypeCode = payload[7].toString(16);
shadow.SerialNumber = getSn(payload,8,16);
//shadow.sn = getSn(payload,6,16);
result.shadow = shadow;
if (shadow.ModelCode == 2) {
    result.category = "BGM1";
    shadow.BloodGlucoseValue = getBloodGlucoseValue(payload);
} else if (shadow.ModelCode == 4) {
    result.category = "TMPG";
    shadow.TempValue = getTempValue(payload);
} else {
    result.category = metadata["category"];
}
//shadow.Date = getDate(payload);

function getSn(payload,start,end) {
    var sn = "";
    for (i=start;i<=end;i++) {
        sn += payload[i].toString(16);
    }
    return sn;
}

function getDate(payload) {
    var date = "";
    date = payload[21]+"-"+payload[22]+"-"+payload[23]
    +" "+payload[24]+":"+payload[25];
    return date;
}

function getBloodGlucoseValue(payload) {
    var v = 0.0;
    var low = payload[27];
    console.log("low:"+low)
    var hight = payload[28];
    console.log("hight:"+hight)
    v = hight*256 + low;
    console.log("v:"+v);
    // v = v / 18.0;
    // console.log("v:"+v);
    // v = Math.ceil(v);
    // console.log("v:"+v);
    v = Math.ceil(v / 18 * 10.0) / 10.0
    console.log("v:"+v);
    //v = v/18;
    //v = v.toFixed(1);
    return v;
}

function getTempValue(payload) {
    var v = 0.0;
    var low = payload[27];
    console.log("low:"+low)
    var hight = payload[28];
    console.log("hight:"+hight)
    v = hight*256 + low;
    console.log("v:"+v);
    //v = v / 100.0;
    v = Math.floor(v / 100.0 * 10.0) / 10.0
    console.log("v:"+v);
    return v;
}

return result;
}
console 命令行工具 X clear

                    
>
console