Макс / мсп в рубин через формат сообщения udp

Я пытаюсь создать небольшой графический интерфейс с max/msp для проекта ruby. Я не могу найти способ правильно преобразовать данные, которые я получаю из формы max.

Вот несколько примеров сообщения, которое я получил от max в ruby ​​(сначала я отправил 2, затем 1 0 -1 -2):

["int\x00,i\x00\x00\x00\x00\x00\x02", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\x00\x00\x00\x01", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\x00\x00\x00\x00", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\xFF\xFF\xFF\xFF", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]
["int\x00,i\x00\x00\xFF\xFF\xFF\xFE", ["AF_INET", 53802, "127.0.0.1", "127.0.0.1"]]

до сих пор я был в состоянии преобразовать положительные значения в целое число через String#ord или String#unpack, но с этими методами отрицательные целые числа дают мне значение 0

1 ответ

Решение

Вы можете легко сделать это с #unpack, используя смещение ('@8') и 32-разрядный бигендиан со знаком со знаком ('l>')

str.unpack('@8l>')

Я не уверен, что означает начальная часть строки ("int\x00,i\x00\x00"), и я просто проигнорировал ее со смещением. Это может потребовать дополнительных действий, если есть какие-либо важные данные.

Другие вопросы по тегам