J'ai une situation où j'ai besoin de convertir une valeur binaire en hexagonale dans Ruby. Ma situation est la suivante: p>
Lorsque Lorsque Quelqu'un pourrait-il m'aider sur la façon de faire ça? Merci d'avance. P> bin = "0000111" code>, ma sortie doit être:
hex = "07" code>. p>.
bin = "010001111" code>, ma sortie doit être:
heex = "08f" code>. P>
4 Réponses :
Tous les deux String # to_i code> et
integer # to_s code> Prenez un argument entier en option spécifiant la base. Vous pouvez donc convertir votre chaîne binaire en un entier à l'aide de la base 2, puis convertir cet entier en une chaîne à l'aide de la base 16. P>
hey merci pour votre réponse .. comme tu dis si j'utilise "11111" .to_i (2) .to_s (16) Cela me donne "1f" mais si je donne "01111" .to_i (2) .to_s (16). ne me donne que "f" mais je veux "0f"
@sundar: Vous pouvez utiliser string #% code> (AKA
sprintf code>) au lieu de
to_s code> pour formater le numéro de manière appropriée - en utilisant
% 02x < / Code> Pour formater le numéro sous forme d'un numéro hexadécimal rembourré à 2 chiffres en utilisant 0s. Cependant, cela ne fonctionne pas si vous souhaitez une base autre que 16 (ou 10 si vous utilisez
d code> au lieu de
x code>), comme
% code> ne fonctionne pas vous permettent de choisir une base arbitraire. Sinon, vous pouvez utiliser
to_s code> suivi de
chaîne # RJUST code>, qui fonctionne avec des bases arbitraires et des caractères de rembourrage.
Que diriez-vous:
>> "0x%02x" % "0000111".to_i(2) #=> "0x07" >> "0x%02x" % "010001111".to_i(2) #=> "0x8f"
Lorsque je passe dans "1" un peu binaire, cela convertit à 001. ne devrait-il pas convertir en "1" dans Hex?
`` `(" 0% 02x "% binaire.to_i (2)) # =>" 001 "
"0x% 02x"% "1" .to_i (2) # => "0x01" code>.
def bin_to_hex(s) s.each_byte.map { |b| b.to_s(16).rjust(2,'0') }.join end Which I found here (with zero padding modifications):http://anthonylewis.com/2011/02/09/to-hex-and-back-with-ruby/
Je ne sais pas comment les gens prétendent que ça marche! Pour moi, en utilisant Ruby 4.1, il donne: '1111'.each_byte.map {| B | B.TO_S (16)} .join => "31313131" code> (et je veux
"F" code> ou quelque chose de similiaire.)
@Djunzu Vous parlez de quelque chose de différent. La chaîne '1111' code> a quatre octets et chacune a une valeur de 49 (c.-à-d. La valeur ASCII). 49 en décimal est 31 dans Hex. Vous n'avez pas de valeur «binaire» dans le sens où la question parle de la question. Vous avez une chaîne contenant des caractères ASCII
'1' code> et
'0' code>.
@Djunzu en fait, ne jamais. Je viens de réaliser que réellement, vous avez raison et la réponse utilise "binaire" dans le mauvais sens.
Vous pouvez utiliser la méthode se référer à: https://apidock.com/Ruby/string/unpack P> J'ai trouvé qu'il est beaucoup plus propre que les solutions énumérées ci-dessus. p> p> Déballez code> sur la chaîne pointant la cible à hex