Partage
  • Partager sur Facebook
  • Partager sur Twitter

Convertisseur binaire hexadécimal

    16 octobre 2022 à 11:19:59

    J’essaye de créer un convertisseur du binaire vers l’hexadécimal, mais pour des raisons qui me sont inconnus mon programme me retourne une mauvaise valeur. Merci d’avance du temps que vous me consacrerez.

    def multiple_quatre(x):
      hexa = ''
      x=str(x)
      while len(x)%4==0:
        x='0'+ x
      for i in range(len(x)//4):
        b=x[4*i:4*i+4]
        l=['0000','0001','0010','0011','0100','0101','0110','0111','1000','1001','1010','1011','1100','1101','1110','1111']
        c = ['0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F']
        for k in range(15):
          if b == l[k]:
            hexa = hexa+c[k]
      return hexa    
    print(multiple_quatre(''))
      
    
    • Partager sur Facebook
    • Partager sur Twitter
      16 octobre 2022 à 11:44:31

      Quelle complication...

      Mais l'idée de résolution est intéressante. 

      -
      Edité par josmiley 16 octobre 2022 à 14:10:56

      • Partager sur Facebook
      • Partager sur Twitter

      Python c'est bon, mangez-en. 

      Anonyme
        16 octobre 2022 à 14:15:51

        Salut !


        Si on veut faire fi des méthodes existantes dans python : 

        b = '11101100101001'
        d = int(b, 2)
        hex(d)
        '0x3b29'

        Et utilisez une méthode similaire à celle que tu souhaites employer, voici une proposition :

        dico = {'0000': '0', '0001': '1', '0010': '2', '0011': '3', '0100': '4', '0101': '5', '0110': '6', '0111': '7', '1000': '8', '1001': '9', '1010': 'A', '1011': 'B', '1100': 'C', '1101': 'D', '1110': 'E', '1111': 'F'}
        
        def bin_to_hex(STRING):
            while len(STRING) % 4 != 0:
                STRING='0'+STRING
            LISTE = [STRING[i:i+4] for i in range(0, len(STRING), 4)]
            print(''.join(dico[BIN] for BIN in LISTE))
        bin_to_hex('11101100101001')
        3B29




        • Partager sur Facebook
        • Partager sur Twitter
          16 octobre 2022 à 14:26:33

          d = {'':'0','1':'1','10':'2','11':'3','100':'4','101':'5','110':'6','111':'7','1000':'8','1001':'9','1010':'A','1011':'B','1100':'C','1101':'D','1110':'E','1111':'F'}
          
          foo = lambda s,r='': s and foo(s[:-4],d[s[-4:].lstrip('0')]+r) or r
          
          print(foo('11101100101001'))
          
          # ~ 3B29

          ou

          d = {'0000':'0','0001':'1','0010':'2','0011':'3','0100':'4','0101':'5','0110':'6','0111':'7','1000':'8','1001':'9','1010':'A','1011':'B','1100':'C','1101':'D','1110':'E','1111':'F'}
          
          foo = lambda s,r='': s and foo(s[:-4],d[s[-4:].zfill(4)]+r) or r



          -
          Edité par josmiley 16 octobre 2022 à 14:44:10

          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            16 octobre 2022 à 16:49:37

            def f(x):return f"{int(x,2):X}"
            • Partager sur Facebook
            • Partager sur Twitter
              16 octobre 2022 à 17:39:43

              On peut convertir de n'impoorte quelle base symbolique vers une autre si on a la liste des symboles de chaque base.
              Dans mon code, je ne considère pas les nombres négatifs ni les erreurs de symboles.
              -
              def numericToSymbolic(n, base):
                  b = len(base)
                  s = ""
                  while n > 0:
                      s=base[n%b] + s
                      n //= b
                  return s or base[0]
              def symbolicToNumeric(s, base):
                  b = len(base)
                  n=0
                  for c in s:
                      n *= b
                      n += base.index(c)
                  return n
              #
              sym = "11010"
              print(numericToSymbolic(symbolicToNumeric(sym, "01"), "0123456789ABCDEF"))
              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

              Anonyme
                16 octobre 2022 à 18:54:45

                AutonmeHiver a écrit:

                def f(x):return f"{int(x,2):X}"


                Nice !!! 

                Belle maitrise du formatage !

                https://docs.python.org/fr/3.5/library/string.html#index-10

                • Partager sur Facebook
                • Partager sur Twitter
                  16 octobre 2022 à 19:09:45

                  ErispoeLeNarvalo a écrit:

                  AutonmeHiver a écrit:

                  def f(x):return f"{int(x,2):X}"


                  Nice !!! 

                  Belle maitrise du formatage !

                  https://docs.python.org/fr/3.5/library/string.html#index-10

                  c'est clair !

                  perso j'ai jamais rien pigé aux formatages, ça m'aurait pourtant sauvé quelques octets.

                  • Partager sur Facebook
                  • Partager sur Twitter

                  Python c'est bon, mangez-en. 

                    16 octobre 2022 à 19:14:23

                    @AutonmeHiver:
                    Je pensais que le titre était:
                    Convertisseur binaire hexadécimal

                    >>> f"{int('10101', 2):6}"                                                                                              
                    '    21'                                                                                                                

                    Rectification:

                    >>> f"{int('10101',2):X}"                                                                                               
                    '15'                                                                                                                    

                    -
                    Edité par PierrotLeFou 16 octobre 2022 à 19:28:08

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Le Tout est souvent plus grand que la somme de ses parties.

                      16 octobre 2022 à 19:31:34

                      PierrotLeFou a écrit:

                      @AutonmeHiver:
                      Je pensais que le titre était:
                      Convertisseur binaire hexadécimal

                      >>> f"{int('10101', 2):6}"                                                                                              
                      '    21'                                                                                                                

                      -
                      Edité par PierrotLeFou il y a 8 minutes

                       f"{int('10101',2):X}"

                      '15'

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Python c'est bon, mangez-en. 

                      Anonyme
                        16 octobre 2022 à 20:30:04

                        josmiley a écrit:

                        perso j'ai jamais rien pigé aux formatages, ça m'aurait pourtant sauvé quelques octets.


                        Ah !? Pourtant il y a pire selon moi, les regex ! L'horreur absolue, je passe 2h à trouver la bonne syntaxe...
                        • Partager sur Facebook
                        • Partager sur Twitter
                          16 octobre 2022 à 20:36:28

                          ErispoeLeNarvalo a écrit:

                          josmiley a écrit:

                          perso j'ai jamais rien pigé aux formatages, ça m'aurait pourtant sauvé quelques octets.


                          Ah !? Pourtant il y a pire selon moi, les regex ! L'horreur absolue, je passe 2h à trouver la bonne syntaxe...


                          J'ai rayé regex de mon vocabulaire depuis longtemps.
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Python c'est bon, mangez-en. 

                            17 octobre 2022 à 1:08:15

                            Pour les utilisateurs de Unix / Linux avec GNU sed, on est presque obligé de connaître les regex.
                            J'ai déjà réussi à convertir un programme Pascal en C d'environ 3000 lignes avec un script sed.

                            (c'était du code compressé à la josmiley :) )

                            Je ne sais pas si je pourrais encore le faire ...

                            Ce que j'aime de re.sub() est qu'on peut lui donner une fonction au lieu d'une chaîne. Mais c'est moins évident d'analyser les groupes quand il y en a.

                            edit:

                            Voici une version lambda de mes fonctions:

                            s2n=lambda s, base, n=0: n if not s else s2n(s[1:], base, n=n*len(base)+base.index(s[0]))
                            n2s=lambda n, base, s="": s or base[0] if n==0 else n2s(n//len(base), base, s=base[n%len(base)]+s)

                            -
                            Edité par PierrotLeFou 17 octobre 2022 à 4:22:13

                            • Partager sur Facebook
                            • Partager sur Twitter

                            Le Tout est souvent plus grand que la somme de ses parties.

                              17 octobre 2022 à 13:24:01

                              Sinon pour répondre au PO, ton problème se situe dans la 1ère boucle while de ta fonction, teste la en dehors, tu verras qu'elle ne fait pas que tu veux qu'elle fasse. (tu dois en plus gérer le cas de la chaine vide car 0%4=0)
                              • Partager sur Facebook
                              • Partager sur Twitter

                              Convertisseur binaire hexadécimal

                              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                              • Editeur
                              • Markdown