我输入的数据是位串,假设是二进制数,每4个字节:
str = "11111111010011111111111010000001"
str2 = "11000000000000000000000000000011"
我想使用按位AND组合这两个字符串,就像这样
str & str2 #=> "11000000000000000000000000000001"
我尝试使用str.to_i
将两个字符串转换为整数但Ruby将输入视为基数10,而不是基数2:
str.to_i #=> 11111111010011111111111010000001
我该如何解决这个问题?
答案 0 :(得分:3)
以下代码应该可以满足您的需求:
str = "11111111010011111111111010000001"
str2 = "11000000000000000000000000000011"
result = str.to_i(2) & str2.to_i(2)
result.to_s(2)
=> "11000000000000000000000000000001"
答案 1 :(得分:3)
您可以使用to_i
转换为二进制表示法,并to_s
通过将base指定为参数来转换回它。 2是二进制,8是八进制,16是十六进制。
例如这里的通用解决方案:
def binary_add(*items)
items.map { |i| i.to_i(2) }.reduce(:&).to_s(2)
end
使用map
将所有项目转换为整数的位置,然后将这些项目与&
组合成一个单数值。然后将该值转换回基数为二的字符串。
可以这样调用:
binary_add(
"11111111010011111111111010000001",
"11000000000000000000000000000011"
)
# => "11000000000000000000000000000001"
答案 2 :(得分:2)