const hexString = 'aa bb aa 02 8f 00 2e 00 90 01 e8 03 96 00 98 00 81 00 05 00 47 00 84 00 26 02 7c 01 32 00 07 00 05 00 25 00 02 00 25 00 02 00 81 00 4c 00 47 00 01 07 87 00 00 00 b2 83 93 03 60 00 56 00 22 00'; const buffer = Buffer.from(hexString.replace(/\s/g, ''), 'hex'); /** * * @param {*} buffer * @returns 解析数据包 */ function parseDataPacket(buffer) { const parsedData = {}; // 跳过前两个字节(0xAA和0xBB) let offset = 2; // CRC16 parsedData.CRC16 = buffer.readUInt16LE(offset); offset += 2; // 其他字段 parsedData.治疗剩余时间 = buffer.readUInt16LE(offset); offset += 2; parsedData.当前已超滤量 = buffer.readUInt16LE(offset); offset += 2; parsedData.超滤率 = buffer.readUInt16LE(offset); offset += 2; parsedData.超滤目标 = buffer.readUInt16LE(offset); offset += 2; parsedData.设定血流量 = buffer.readUInt16LE(offset); offset += 2; parsedData.实际血流量 = buffer.readUInt16LE(offset); offset += 2; parsedData.静脉压 = buffer.readInt16LE(offset); offset += 2; parsedData.动脉压 = buffer.readInt16LE(offset); offset += 2; parsedData.跨膜压 = buffer.readInt16LE(offset); offset += 2; parsedData.电导度 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.透析液实际流量 = buffer.readUInt16LE(offset); offset += 2; parsedData.透析液实际温度 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.肝素速率 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.肝素停止时间 = buffer.readUInt16LE(offset); offset += 2; parsedData.追加量 = buffer.readUInt16LE(offset); offset += 2; parsedData.前补液总量 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.前已补液量 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.后补液总量 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.后已补液量 = buffer.readUInt16LE(offset) / 10; offset += 2; parsedData.血压计收缩血压 = buffer.readUInt16LE(offset); offset += 2; parsedData.血压计舒张血压 = buffer.readUInt16LE(offset); offset += 2; parsedData.血压计脉搏 = buffer.readUInt16LE(offset); offset += 1; console.log(offset); parsedData.模式 = buffer.readUInt8(offset+1); console.log('模式:', parsedData.模式,offset); offset +=1; parsedData.KtV = buffer.readUInt8(offset+1); offset += 2; console.log('KtV:', parsedData.KtV,offset); parsedData.清除率 = buffer.readUInt16LE(offset); offset += 2; parsedData.相对血容量 = buffer.readUInt16LE(offset); offset += 2; parsedData.设备编号前16位 = buffer.readUInt32LE(offset); offset += 2; parsedData.设备编号后16位 = buffer.readUInt32LE(offset); offset += 2; parsedData.血压计平均血压 = buffer.readUInt16LE(offset); offset += 2; parsedData.血氧参数Spo2值 = buffer.readUInt16LE(offset); offset += 2; parsedData.血氧参数脉率 = buffer.readUInt16LE(offset); offset += 2; return parsedData; } // 解析数据包 const parsedData = parseDataPacket(buffer); // 打印解析后的数据 console.log('Parsed Data:', parsedData);