Ruby:翻转字符位

时间:2011-11-22 14:35:39

标签: ruby binary

我只是试图翻转一个角色。我可以把它变成二进制形式,但是当用0xff测量数据时,似乎没有给我我想要的东西。

bin = "a".unpack("b*")[0].to_i # Will give me the binary value        (10000110)
flip = bin ^ 0xff              # this will give me 9999889, expecting (01111001)

最后,我想将其重新打包为"字符" ...

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:6)

你需要告诉Ruby解压缩的字符串是二进制文件:

bin = "a".unpack("b*")[0].to_i(2) # => 134
flip = bin ^ 0xff # => 121
flip.to_s(2) # => "1111001"
[flip.to_s(2)].pack("b*") # => "O"

答案 1 :(得分:2)

一些事情:

你可能想要unpack('B*'),而不是b*因为b*首先给你LSB。

你可能根本不需要二进制文件(“二进制”只是一个数字的表示,它不需要是“二进制数”以便对它进行异或)。所以你可以做到:

number = "a".unpack('C*')[0]
flip = number ^ 0xff
new_number = [flip].pack('C*')

或者,甚至:

number = "a".ord
flip = number ^ 0xff
new_number = flip.chr

哦,结果不应该是“O”