Javascript JS从缓冲区读取字节
我可以用一些Javascript JS从缓冲区读取字节,javascript,node.js,byte,buffer,Javascript,Node.js,Byte,Buffer,我可以用一些Stringhacking解析缓冲区,但是必须有一种更直接的方法从缓冲区数据到最终值。 我一直在尝试使用一些缓冲区.readInt8,readInt16LE等,但运气不好。第一个和最后一个值为2字节;如果我理解这里涉及的词汇。另外两对一 从下面的示例中,我希望通过parseInt(buffer.readUInt16BE(6)|(buffer.readUInt16BE(7)获得温度(228),这应该是您要查找的: 设Buf=Buffer.from(“a4c1380a701400e423
String
hacking解析缓冲区,但是必须有一种更直接的方法从缓冲区数据到最终值。
我一直在尝试使用一些缓冲区.readInt8
,readInt16LE
等,但运气不好。第一个和最后一个值为2字节;如果我理解这里涉及的词汇。另外两对一
从下面的示例中,我希望通过
parseInt(buffer.readUInt16BE(6)|(buffer.readUInt16BE(7)获得温度(228),这应该是您要查找的:
设Buf=Buffer.from(“a4c1380a701400e4233c0ac5c2”,“hex”);
//让Buf作为蓝牙温度计的缓冲区。
//这里使用的是示例数据,与您的问题相匹配。
设温度c=Buf.readUInt16BE(6)/10
让湿度=Buf.readUIntBE(8,1)
让电池=Buf.readUIntBE(9,1)
设电池V=(Buf.readUInt16BE(10))/1000
//只是为了证实它的有效性。。。
控制台日志(温度、湿度、电池、电池)
//样本输出:22.8 35 60 2.757(正确)
每个字节在偏移量上都是1
。因此,如果我们把6
读成2个字节,然后再把7
,我们实际上是在从温度上读第二个字节。记住要考虑到16位是2个字节;节点是逐字节偏移的。很好!!!谢谢;这很有意义。你知道为什么Buf.readUInt16BE(6)!==(Buf.readUIntBE(6,1)这将是您通常读取16位be数的方式,但由于NodeJS已将其解析为16位be数,因此您不必这样做。
// (example data in comments)
const buffer = peripheral.advertisement.serviceData[0].data;
// a4c1380a701400e4233c0ac5c2
const lameParsing = {
// Starts with the address a4:c1:38:0a:70:14, then the values
temperatureC: parseInt(buffer.toString("hex").slice(12, 16), 16) / 10,
// 22.8
humidity: parseInt(buffer.toString("hex").slice(16, 18), 16),
// 35
battery: parseInt(buffer.toString("hex").slice(18, 20), 16),
// 60
batteryV: parseInt(buffer.toString("hex").slice(20, 24), 16) / 1000
// 2.757
};