SOURCE

function Decode(fPort, bytes) {
        var jsonobj;
        var result = 0;
        // 当前时间
        var myDate = new Date();
        var current_time = myDate.toLocaleString();
        // 16进制报文
        var hexBytes = new Array();
        // 原始报文字符串
  	    var rawData = "";
        for(var i = 0; i < bytes.length; i++) {
            rawData += bytes[i] + " ";
        }
        // 采集数据为19个字节
        if (bytes.length = 19) {
            jsonobj = {
                "Flag": 1,
                "SensorType": 43,
                "SensorNumberThird": 0,
                "Temperature": parseTemperature(bytes),
                "Value": parseValue(bytes),
                "Timestamp": current_time,
                "rawData": rawData,
                "length": bytes.length
            };
        } else {
            jsonobj = {
                "Flag": -1,
                "SensorType": 43,
                "SensorNumberThird": 0,
                "Timestamp": current_time,
                "rawData": rawData,
                "length": bytes.length
            };
        }
        return jsonobj;
    }

    // 计算温度值 12-13为温度*16
    function parseTemperature(bytes) {
        var tempBinVal = intToBinary(bytes[11], 8) + intToBinary(bytes[12], 8);
        // console.info("temperature binaryValue", tempBinVal);
        // 最高位为0为正式,1则为负数
        if (tempBinVal.substring(0, 1) == '0') {
            return parseInt(tempBinVal, 2) / 16;
        } else { //负数
            return binToComplement(tempBinVal, 16) * -1 / 16;
        }
    }

    // 计算测量值 14~17
    function parseValue(bytes) {
        var xBinVal = intToBinary(bytes[13], 8) + intToBinary(bytes[14], 8)
            + intToBinary(bytes[15], 8)
            + intToBinary(bytes[16], 8);
        // 最高位为0为正式,1则为负数
        if (xBinVal.substring(0, 1) == '0') {
            return parseInt(xBinVal, 2);
        } else { //负数用补码表示,绝对值需要求原码
            return binToComplement(xBinVal, 16) * -1;
        }
    }

    // 10进制转2进制
    function intToBinary(value, length) {
        var number = value.toString(2);
        return (Array(length).join("0") + number).slice(-length);//高位补0
    }

    // 2进制的补码,结果为十进制绝对值
    function binToComplement(value, length) {
        // 二进制高位补0
        var binVal = (Array(length).join("0") + value).slice(-length);
        // 正数的补码是原码本身
        if (binVal.substring(0, 1) == '0') {
            return parseInt(binVal, 2);
        }else {
        // 负数的补码为原码取反+1
        var array = binVal.substring(1, length).replace('-',0).split('');
        for(var i=0; i<array.length; i++) {
            array[i] = array[i] == '0' ? '1' : '0';
        }
        return parseInt(array.join(''), 2) + 1;
        // return parseInt(binVal.substring(1, length).replace('-',0).split('').map(bit=>bit=='0'?'1':'0').join(''), 2)+1;
    }
}

console 命令行工具 X clear

                    
>
console