当我在nodeRED调试中将对象视为数字时,它以十六进制显示

时间:2018-04-28 12:56:30

标签: javascript object hex decode

在NodeRED msg输出中,我看到十六进制而不是数字。

我在nodeRED中有一个小的解码功能。它将Cayenne LPP有效负载读作缓冲对象。有效载荷源是LoRaWAN温度传感器。

有效载荷的十六进制看起来像这样(分解为易读性)

010001 020000 030000 0402015A 0567011F 0665000D 0771FFA0 FFFBFC34

我试图阅读第5节(或Cayenne对象05),并将其转换为温度。

我忽略05 - 那是对象编号 我忽略了67 - 这就是说“我是一个温度值' 我使用的是011F值 - 这就是我想要的温度。我必须除以10。

如果我将它转换为calc到dec,我得到287 - 其中等于28.7度 这是对的。

我的解码看起来像这样:

var raw = msg.payload;
buf = Buffer.from (raw, "hex");
msg.environment = new Object();
newtemp=buf.readInt16BE(15);
newtemp = newtemp / 10;
msg.environment.temp=newtemp;
return msg;

当我在调试窗口中查看结果时,我看到:(由我减少到只有临时值)

0x1c.b33333333333

如果我使用此代码

var raw = msg.payload;
buf = Buffer.from (raw, "hex");
newtemp=buf.readInt16BE(15);
newtemp = newtemp / 10;
var environment = {temp:newtemp};
return environment;

我在调试窗口中得到了这个:

temp:28.8

这与继承有关吗? 如何使顶级代码工作,以便msg具有所有数据,而不仅仅是具有温度的单个对象?

0 个答案:

没有答案