Ruby如何处理字节/二进制?

Jen*_*nny 10 ruby binary byte

我试图在套接字上发送一系列二进制字节,以满足我公司使用的特定标准.我公司之前没有人使用Ruby,但在其他语言中,他们一次发送一个字节的数据(通常使用某种"打包"方法).

我无论如何都无法动态创建二进制文件,或者根本创建字节(最接近我可以找到它如何将字符串转换为表示字符的字节).

我知道你可以这样说:

@var = 0b101010101

但是,如何将"101010101"形式的字符串转换为将string.to_i(2)生成的结果整数转换为实际二进制文件.如果我只是通过套接字发送字符串,那么只是发送ASCII为"0"和"1"而不是文字字符?

当然有一些方法可以在Ruby中本地执行此操作吗?

Mat*_*kel 14

不知道这是否足够,但您可以使用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
Run Code Online (Sandbox Code Playgroud)


Dav*_*son 10

要创建具有任意字节序列的字符串,请执行以下操作:

binary_string = "\xE5\xA5\xBD"
Run Code Online (Sandbox Code Playgroud)

"\ x"是从十六进制编码任意字节的特殊转义,因此"\ xE5"表示字节0xE5.

然后尝试在套接字上发送该字符串.

  • 二进制字符串很可能有一个值为0x2F(47)的字节.这是"/"的ASCII编码,所以如果你`检查`字符串,Ruby通常会打印出一个"/".任何ASCII字符都是一样的.Ruby实际上并不知道你的字符串是否是"二进制字符串",对于Ruby你的字符串基本上是一个字节序列(除了在1.9中他们添加了一些编码信息). (2认同)

kgi*_*kis 9

看看String.unpack方法.这是一个例子:

str = "1010"
str.unpack("cccc")
=> [49, 48, 49, 48]
Run Code Online (Sandbox Code Playgroud)

这将为您提供整数值.有更多方法可以进行转换.