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