使用Node.js上的Regex解析器从串行端口解析字节序列

问题描述

在Node.js脚本上,我必须从串行端口读取和解释几个字节序列。

如果序列以特定的标头(0xff 0xff)开头,则其长度始终为24个字节; 但是,由于存在其他具有不同长度的序列,因此我无法使用具有特定长度的ByteLength解析器:因此,我决定尝试使用Regex解析器。 问题是,使用此代码,我似乎无法使其读取0xff值:

const SerialPort = require('serialport')
const Regex = require('@serialport/parser-regex')

const serialComm = new SerialPort('COM1',{ baudrate: 9600 })
const parser = new Regex({ encoding: 'hex',regex: /\xff/ })
serialComm.pipe(parser)

parser.on('data',function (data) {
  console.log('Received acceptable data!')
  console.log(data)
})

经过几次尝试,我将正则表达式更改为/\xff*/,以便显示任何值, 而不是“ ff”,我收到的是“ efbfbd”,就像这样:

Received acceptable data!
efbfbd
Received acceptable data!
efbfbd
Received acceptable data!
20
Received acceptable data!
00
Received acceptable data!
60
Received acceptable data!
12
Received acceptable data!
00
Received acceptable data!
04
Received acceptable data!
5e
[...]

我该怎么办? 而且,如果我无法阅读十六进制代码中的“ ff”,则十六进制编码是否有点毫无用处? 我应该使用其他编码吗?就像使用扩展ASCII的东西一样,以便我可以读取0到255之间的值?

解决方法

好吧,最后我使用了一个长度为1的字节长度解析器,并一次一个字节地手动处理了所有字节序列,只显示了完整的序列。太糟糕了,我希望有一个更优雅的解决方案,但我想这是最有效的。