12
votes

Convertir une chaîne de format binaire en int, en C

Comment convertir une chaîne binaire comme "010011101" à un int, et comment puis-je convertir un int, comme 5, à une chaîne "101" en C?

c

1 commentaires

La première moitié de la question est à Stackoverflow.com/questions/117844/...


7 Réponses :


23
votes

La fonction strtol dans la bibliothèque standard prend un paramètre "base", qui serait dans ce cas 2. xxx

(premier code C écrit en environ 8 ans: -)


2 commentaires

En C, il n'y a pas de littéral «NULL» intégré. Il y a une macro, null, elle doit donc être supérieure à la tête. En outre, l'argument de chaîne doit être fait "const", car la fonction ne le modifiera pas.


Oh bien. Moi, j'aurais probablement utilisé "0" après que le compilateur m'a dit de l'erreur :-)



0
votes

Je suppose que cela dépend vraiment de quelques questions sur vos chaînes / programme. Si, par exemple, vous saviez que votre numéro ne serait pas plus grand que 255 (c'est-à-dire que vous n'utilisiez que 8 bits ou 8 0S / 1S), vous pouvez créer une fonction où vous la remettez à 8 bits de votre chaîne, parcourez-le et ajoutez à une somme que vous avez retournée à chaque fois que vous appuyez sur un 1. IE Si vous frappez le bit pour 2 ^ 7 Add 128 et le bit suivant que vous avez frappé était 2 ^ 4 Ajoutez 16.

C'est mon idée rapide et sale. Je pense que plus et Google pour ya à l'école. : D


0 commentaires

13
votes

Si c'est un problème de devoirs, ils veulent probablement que vous impliez strtol code>, vous auriez une boucle quelque chose comme ceci:

   total <<= 1;
   if (*start++ == '1') total^=1;


2 commentaires

trouvé encore plus de solution fantaisie ... tandis que (len--) {re = (ret << 1) | (* bits ++ & 1);} `


Je crois que vous devez commencer par fin et travailler à gauche à gauche.



0
votes

Pour la 2e partie de la question, c'est-à-dire "Comment puis-je convertir un int, comme 5, à une chaîne" 101 "en C?", essayez quelque chose comme: xxx


0 commentaires

0
votes

Vous pouvez utiliser le codage suivant

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
   int nRC = 0;
   int nCurVal = 1;
   int sum = 0;
   char inputArray[9];
   memset(inputArray,0,9);
   scanf("%s", inputArray);
   // now walk the array:
   int nPos = strlen(inputArray)-1;
   while(nPos >= 0)
   {
      if( inputArray[nPos] == '1')
      {
         sum += nCurVal;
      }
      --nPos;
      nCurVal *= 2;
   }
   printf( "%s converted to decimal is %d\n", inputArray, sum);
   return nRC;
}


0 commentaires

0
votes

Utilisez comme ceci: xxx

sortie: xxx


1 commentaires

Remarque: ITOA est une fonction C non standard



0
votes

Pour répondre à la deuxième partie de la question.

char* get_binary_string(uint16_t data, unsigned char sixteen_bit)
{
    char* ret = NULL;
    if(sixteen_bit) ret = (char*)malloc(sizeof(char) * 17);
    else ret = (char*)malloc(sizeof(char) * 9);
    if(ret == NULL) return NULL;

    if(sixteen_bit){
        for(int8_t i = 15; i >= 0; i--){
            *(ret + i) = (char)((data & 1) + '0');
            data >>= 1;
        }
        *(ret + 16) = '\0';
        return ret;
    }else{
        for(int8_t i = 7; i >= 0; i--){
            *(ret + i) = (char)((data & 1) + '0');
            data >>= 1;
        }
        *(ret + 8) = '\0';
        return ret;
    }
    return ret;
}


0 commentaires