我正在尝试在套接字上发送一系列二进制字节,以满足我公司使用的特定标准。我公司之前没有人使用Ruby,但在其他语言中,他们一次发送一个字节的数据(通常使用某种“打包”方法)。
我无论如何都无法动态创建二进制文件,或者根本不创建字节(最接近我可以找到它如何将字符串转换为表示字符的字节)。
我知道你可以这样说:
@var = 0b101010101
但是如何将“101010101”形式的字符串转换为将string.to_i(2)生成的结果整数转换为实际的二进制文件。如果我只是通过套接字发送字符串,那么只是发送ASCII为“0”和“1”而不是文字字符?
当然,有一些方法可以在Ruby中本地执行此操作吗?
答案 0 :(得分: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
答案 1 :(得分:10)
要创建具有任意字节序列的字符串,请执行以下操作:
binary_string = "\xE5\xA5\xBD"
“\ x”是从十六进制编码任意字节的特殊转义,因此“\ xE5”表示字节0xE5。
然后尝试在套接字上发送该字符串。
答案 2 :(得分:9)
查看String.unpack方法。这是一个例子:
str = "1010"
str.unpack("cccc")
=> [49, 48, 49, 48]
这将为您提供整数值。有更多方法可以进行转换。