Как мне прочитать двоичные данные из файла и передать их через сокеты Ruby клиенту, выполняющему побитовые операции?

#c #ruby #tcp #binary-data

#c #ruby #tcp #двоичные данные

Вопрос:

В настоящее время я работаю над программным обеспечением на Ruby, которое предназначено для чтения двоичного сообщения из файла, а затем передачи его через сокет TCP или UDP в программу на C, написанную моим коллегой. Эта программа на C должна уметь выполнять побитовые операции с этими двоичными сообщениями, прежде чем отправлять их обратно в мою программу для сравнения отправленных и полученных данных.

Моя текущая проблема связана с тем, как Ruby, похоже, обрабатывает все в виде строк. Я относительно новичок в языке и не уверен, как мне следует подойти к этой проблеме.

Моя главная задача — убедиться, что содержимое моих двоичных сообщений не претерпело изменений до или во время их первоначальной передачи в программу C.

Я был бы признателен за любую помощь, которую вы могли бы предоставить.

Спасибо, Мартин

Комментарии:

1. Есть ли где-нибудь вопрос?

2. Попробуйте и посмотрите. Если у вас есть вопрос, касающийся определенного поведения, вернитесь и задайте его нам! 🙂

3. Как говорит Арлен, попробуйте и посмотрите, и если это не удастся, покажите нам свою работу, и мы постараемся помочь.

Ответ №1:

Class: IO Ruby является хорошей отправной точкой. Прочитайте первый раздел, особенно "b" флаг и то, как он соотносится с операционными системами. После этого может быть полезно read или read_bytes .

Re: «Ruby, кажется, обрабатывает все в виде строк». Ruby воспринимает файл как последовательность байтов, считанных с диска. Именно то, как вы указываете Ruby читать, обрабатывать и отображать эти байты, определяет, являются ли эти байты строками текста, записями из какого-либо файла базы данных, изображением или звуковым файлом. Вы можете прочитать текст, используя методы, ориентированные на данные, затем развернуться и обработать данные как строку. Вы могли бы прочитать «двоичные» данные, используя методы чтения строк, затем объединить их в памяти и обработать как байты. Ruby — это всего лишь инструмент, который мы используем для манипулирования байтами, но мы сами решаем, что означают эти байты.