12

会社が使用する特定の標準を満たすために、ソケットを介して一連のバイナリ バイトを送信しようとしています。私の会社ではこれまで Ruby を使用したことはありませんが、他の言語では一度に 1 バイトずつデータを送信します (通常は何らかの「パック」メソッドを使用します)。

とにかく、その場でバイナリを作成したり、バイトを作成したりする方法を見つけることができません(最も近いのは、文字列をその文字を表すバイトに変換する方法を見つけることができます)。

私はあなたが次のようなことを言うことができることを知っています:

@var = 0b101010101

しかし、「101010101」の形式の文字列、または string.to_i(2) を実行したときに作成された結果の整数を実際のバイナリに変換するにはどうすればよいでしょうか。ソケットを介して文字列を送信すると、リテラル文字の代わりに "0" と "1" の ASCII が送信されませんか?

Rubyでネイティブにこれを行う方法は確かにありますか?

4

3 に答える 3

15

これが十分に役立つかどうかはわかりませんが、Ruby で整数のビットにインデックスを付けることができます。

n = 0b010101

n # => 21

n = 21

n[0]  # => 1
n[1]  # => 0
n[2]  # => 1
n[3]  # => 0
n[4]  # => 1
n[5]  # => 0
于 2009-07-28T13:46:27.243 に答える
12

任意のバイト シーケンスを持つ文字列を作成するには、次のようにします。

binary_string = "\xE5\xA5\xBD"

"\x" は 16 進数から任意のバイトをエンコードする特別なエスケープであるため、"\xE5" はバイト 0xE5 を意味します。

次に、その文字列をソケットに送信してみてください。

于 2010-11-20T23:20:44.387 に答える
10

String.unpackメソッドを見てください。これは例です:

str = "1010"
str.unpack("cccc")
=> [49, 48, 49, 48]

これにより、整数値が得られます。変換を行う方法は他にもあります。

于 2009-07-28T12:50:02.537 に答える