2011-11-22 2 views
1

나는 문자의 비트를 뒤집어 쓰려고합니다. 나는 그것을 바이너리 형식으로 만들 수 있지만 0xff로 그 데이터를 xoring하면 나에게 내가 원하는 것을 나에게주지 않을 것 같다.Ruby : 문자 뒤집기 비트

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

마지막으로, 나는

어떤 도움

주시면 감사하겠습니다 ...는 "문자"로 다시 포장하고 싶다.

답변

5

당신은 압축을 푼 문자열이 진 것을 루비를 알려줄 필요가 : 사물의

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" 
2

커플 : b*는 LSB 먼저 제공하지 b*

당신은 아마, unpack('B*')하고자합니다.

바이너리가 전혀 필요하지 않을 수도 있습니다. "바이너리"는 숫자를 표현한 것으로 XOR 할 때 "이진수"일 필요는 없습니다.

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

을하거나, 심지어 : 그래서 당신은 간단하게 할 수있는

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

를 아, 그리고 그 결과는 "O"

+0

두 번째 예는 1.9에서 작동하는 것처럼 보이지만 나던해서는 안됩니다 처음에는 훨씬 이해하기가 더 쉽습니다. – wuntee

+0

어떤 버전을 사용해 보았습니까? 1.9.1 및 1.9.2에서 작동합니다. 또한 : http://ideone.com/y74Ov –