2010-02-26 7 views

Répondre

10

Si c'est un problème de travail qu'ils veulent probablement vous de mettre en œuvre strtol, vous auriez quelque chose comme LOOP:

char* start = &binaryCharArray[0]; 
int total = 0; 
while (*start) 
{ 
total *= 2; 
if (*start++ == '1') total += 1; 
} 

Si vous voulez obtenir la fantaisie vous pouvez utiliser dans la boucle: "? en C "

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

trouvé encore plus de fantaisie solution..' while (len--) {ret = (ret << 1) | (* bits ++ & 1);} ' –

19

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

int fromBinary(const char *s) { 
    return (int) strtol(s, NULL, 2); 
} 

(premier code C J'ai écrit dans environ 8 ans :-)

+2

@Pointy: Nice code après 8 ans: P :) – t0mm13b

+1

En C, il n'y a pas de littéral "nul" intégré. Il y a une macro, NULL, donc elle doit être en majuscule. En outre, l'argument de chaîne devrait être fait "const", puisque la fonction ne le modifiera pas. – unwind

+0

oh à droite. Moi, j'aurais probablement utilisé "0" après que le compilateur m'ait parlé de l'erreur :-) – Pointy

0

Je suppose que cela dépend vraiment de quelques questions sur vos chaînes/programme. Si, par exemple, vous saviez que votre nombre ne dépasserait pas 255 (IE vous n'utilisiez que 8 bits ou 8 0s/1s), vous pourriez créer une fonction où vous lui passeriez 8 bits de votre chaîne, la traverseriez et ajouteriez à une somme que vous avez retournée chaque fois que vous frappez un IE. 1 IE si vous frappez le bit pour 2^7 ajouter 128 et le prochain bit que vous frappez était 2^4 ajouter 16.

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

0

pour la 2ème partie de la question, à savoir" comment puis-je convertir un entier, comme 5, une chaîne" 101, essayez quelque chose comme:

void 
ltostr(unsigned long x, char * s, size_t n) 
{ 
    assert(s); 
    assert(n > 0); 

    memset(s, 0, n); 
    int pos = n - 2; 

    while(x && (pos >= 0)) 
    { 
    s[ pos-- ] = (x & 0x1) ? '1' : '0'; // Check LSb of x 
    x >>= 1; 
    } 
} 
0

Vous pouvez utiliser les éléments suivants de codage

#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

Utilisez comme ceci:

char c[20]; 
int s=23; 

itoa(s,c,2); 
puts(c); 

Sortie:

10111 
+0

Remarque:' itoa' est une fonction C non standard –

Questions connexes