在 Node.js 上使用 Regex 解析器从串口解析字节序列
Parsing a bytes sequence from serialport using a Regex parser on Node.js
在 Node.js 脚本中,我必须从串行端口读取和解释几个字节序列。
如果序列以特定的 header (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 的 Byte-length 解析器,并一次一个字节地手动处理所有字节序列,只显示完整的序列。太糟糕了,我希望有一个更优雅的解决方案,但我想这个是最有效的。
在 Node.js 脚本中,我必须从串行端口读取和解释几个字节序列。
如果序列以特定的 header (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 的 Byte-length 解析器,并一次一个字节地手动处理所有字节序列,只显示完整的序列。太糟糕了,我希望有一个更优雅的解决方案,但我想这个是最有效的。