#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 — это всего лишь инструмент, который мы используем для манипулирования байтами, но мы сами решаем, что означают эти байты.