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? p>
7 Réponses :
La fonction (premier code C écrit en environ 8 ans: -) p> p> strtol code> dans la bibliothèque standard prend un paramètre "base", qui serait dans ce cas 2.
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 :-)
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. P>
C'est mon idée rapide et sale. Je pense que plus et Google pour ya à l'école. : D p>
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;
trouvé encore plus de solution fantaisie ... tandis que (len--) {re = (ret << 1) | (* bits ++ & 1);} `
Je crois que vous devez commencer par fin code> et travailler à gauche à gauche.
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:
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;
}
Utilisez comme ceci: sortie: p>
Remarque: ITOA code> est une fonction C non standard
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;
}
La première moitié de la question est à Stackoverflow.com/questions/117844/...