首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MQTT微服务( NestJS Transporter)重新接收十六进制数据作为缓冲区

MQTT微服务( NestJS Transporter)重新接收十六进制数据作为缓冲区
EN

Stack Overflow用户
提问于 2021-02-14 00:22:52
回答 2查看 176关注 0票数 1

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没有问题。

EN

回答 2

Stack Overflow用户

发布于 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)不知何故“丢失”/以错误的方式转换回来。

票数 0
EN

Stack Overflow用户

发布于 2021-02-14 01:15:31

解决方案:函数接收的处理事件的上下文参数包含缓冲区。请参阅https://docs.nestjs.com/microservices/mqtt#context

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66187321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档