我只是试图翻转一个角色。我可以把它变成二进制形式,但是当用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)
最后,我想将其重新打包为"字符" ...
任何帮助都将不胜感激。
答案 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”