Макс / мсп в рубин через формат сообщения 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"), и я просто проигнорировал ее со смещением. Это может потребовать дополнительных действий, если есть какие-либо важные данные.