2 votes

Rubis : Retourner les bits des caractères

J'essaie simplement de retourner les morceaux d'un personnage. Je peux l'obtenir sous forme binaire, mais en xant ces données avec 0xff, il semble que je n'obtienne pas ce que je veux.

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

Enfin, je veux le réorganiser en tant que "personnage"...

Toute aide serait appréciée.

7voto

Chowlett Points 19889

Vous devez indiquer à Ruby que la chaîne décompressée est binaire :

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"

2voto

Mladen Jablanović Points 22082

Deux ou trois choses :

Vous souhaitez probablement unpack('B*') , pas b* como b* vous donne le LSB en premier.

Vous n'avez probablement pas besoin de binaire du tout ("binaire" est juste une représentation d'un nombre, il n'a pas besoin d'être "un nombre binaire" pour le XOR). Vous pouvez donc faire simple :

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

ou, même :

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

Oh, et le résultat ne doit pas être "O"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X