NestJS在幕后使用MQTT.js进行基于MQTT的通信(据我所见)。我正在尝试接收十六进制数据作为缓冲区,但收到的数据总是被解码为文本。我无法正确地对其进行编码以获取发送的十六进制数据。我尝试了大量的编码方案。
有没有办法告诉NestJS不应该将数据解码为文本?
示例:
一个客户端发布0xfa。另一个客户机(NestJS应用程序)监听这个主题,并接收一个字符串,在本例中是一个不可打印的字符。当我尝试用Buffer.from(message, 'utf-8')将它转换回缓冲区时,我得到0xefbfbd。例如,使用Buffer.from(message, 'ascii')将其转换回会导致0xfd。
这个问题发生在从0x80到0xff的十六进制数据,因为我猜它不是标准化的(例如ascii是从0x00到0x7f标准化的)。因此,当我尝试发送0x01时,使用Buffer.from(message, 'utf-8')和Buffer.from(message, 'ascii')接收字符并将其转换回0x01没有问题。
发布于 2021-02-14 00:47:52
我认为这个问题可以归结为NodeJS中的Buffer?请参阅在Node REPL中执行的以下示例:
Buffer.from(Buffer.from([0,1,128]).toString(), 'ascii') //
Buffer.from(Buffer.from([0,1,128]).toString(), 'utf-8') //
这里可以清楚地看到,128小数( 0x80)不知何故“丢失”/以错误的方式转换回来。
发布于 2021-02-14 01:15:31
解决方案:函数接收的处理事件的上下文参数包含缓冲区。请参阅https://docs.nestjs.com/microservices/mqtt#context
https://stackoverflow.com/questions/66187321
复制相似问题