0


0

ファイルからバイナリデータを読み取り、Rubyソケットを介してビット単位の操作を実行するクライアントに転送するにはどうすればよいですか?

現在、ファイルからバイナリメッセージを読み取り、TCPまたはUDPソケットを介して同僚のCプログラムに送信することを目的とした、Rubyのソフトウェアに取り組んでいます。 このCプログラムは、送信されたデータと受信されたデータを比較するためにプログラムに送り返す前に、これらのバイナリメッセージに対してビットごとの操作を実行できる必要があります。

私の現在の問題は、Rubyがすべてを文字列として扱う方法に関するものです。 私は比較的新しい言語であり、この問題にどのように取り組むべきかについて確信が持てません。

私の主な関心事は、Cプログラムへの最初の転送前または転送中に、バイナリメッセージの内容が変更されないようにすることです。

あなたが提供できる助けは大歓迎です。

ありがとう、マーティン

1 Answer


0


Rubyのhttp://ruby-doc.org/core/classes/IO.html[Class:IO]は良い出発点です。 最初のセクション、特に `" b "`フラグと、それがOSにどのように関係するかを読んでください。 その後、「read」または「read_bytes」が役立つ場合があります。

Re:「Rubyはすべてを文字列として扱っているようです」。 Rubyは、ファイルをディスクから読み取った一連のバイトと見なします。 これらのバイトを読み取り、処理、表示するようにRubyに指示するのは、バイトがテキストの行であるか、データベースファイルのレコードであるか、イメージファイルであるか、サウンドファイルであるかを決定する方法です。 データ指向のメソッドを使用してテキストを読み、それから向きを変えてデータを文字列として扱うことができます。 文字列読み取りメソッドを使用して「バイナリ」データを読み取り、それをメモリに集約してバイトとして扱うことができます。 Rubyはバイトを操作するために使用するツールにすぎませんが、これらのバイトの意味を決定するのは私たちです。