12

我正在尝试通过套接字发送一系列二进制字节,以满足我公司使用的特定标准。我公司以前没有人为此使用过 Ruby,但在其他语言中,它们一次发送一个字节的数据(通常使用某种“打包”方法)。

无论如何,我都找不到动态创建二进制文件或创建字节(我能找到的最接近的方法是如何将字符串转换为表示其字符的字节)。

我知道你可以这样说:

@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" 是从十六进制编码任意字节的特殊转义,因此 "\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 回答