Я пытаюсь декодировать кадры с переменной длиной и параметрами (например, TLV в кадрах Ethernet)
Для этого я подумал о том, чтобы сделать забавную рекурсивную функцию:
fun (Fields, Bin) ->
Parse =
fun (P, F, <<Length, Rest/binary>>) ->
P(P, F#{first => Length}, Rest)
end,
Parse(Parse, Fields, Bin)
end.
Таким образом, Bin - это входной кадр, например: 40 02 12 45 01 50
Первый байт - это тип кадра, 02
- длина следующих данных 12 45
, 01
- длина следующих данных 50
и т. Д.
Но моя функция не работает должным образом, используя забавный трюк
Я возвращаю объект JSON, поскольку он отправляется через MQTT.