node-red-contrib-binary сделает это за вас, вам нужно будет добавить шаблон, который соответствует формату всего буфера. Синтаксис для паттерна можно найти здесь здесь .
В результате вы получите что-то вроде:
... value: b32, ...
, а затем выведите msg.payload.value
с номером.
В функциональном узле предполагается, что вы передали буфер как msg.paylaod
, это будет что-то вроде этого:
var value = msg.paylaod.readInt32BE(33);
РЕДАКТИРОВАТЬ:
Если вход представляет собой короткий массив, то вы можете сделать что-то вроде следующего в функциональном узле:
var value = (mag.payload[0] << 8) + (mag.payload[1] << 24)
+ (msg.payload[2] << 16) + (msg.payload[3] << 8);
Или просто преобразовать массив в буфер и прочитать как раньше:
var buff = Buffer.from(msg.payload);
var value = buff.readInt32BE(0);
Я думаю, что лучше иметь DTO, содержат ссылку на Объект области так, чтобы потребители DTO могли начать использовать Объект области. Тем не менее, если потребители DTO не должны видоизменять Объект области, Вы, возможно, должны иметь DTO, содержат значения, инкапсулировавшие в Объекте области. Это может быть трудно, так как Вы, возможно, должны сделать глубокую копию Объекта области.
Я не уверен, почему это - проблема, что представление типа DTO как услуга заставило бы использование своих методов считывания/методов set делать распространение в прямом и обратном направлениях. Если сервис является удаленным сервисом, возвращенный DTO сериализируется так или иначе, и Ваши методы считывания/методы set получат копию значений. Если сервис не является удаленным, это, кажется, не большая часть штрафа, чтобы сделать "распространение в прямом и обратном направлениях", так как клиент и сервис находятся в том же пространстве процесса.