2010-11-25 4 views
4

gcc 4.5.1 c89conversion d'un ascii en int

J'ai un tampon qui est rempli de caractères char. Je dois les comparer:

C'est un échantillon de contenu du tampon:

vote buffer [ 51 ] 
vote buffer [ 32 ] 
vote buffer [ 49 ] 
vote buffer [ 32 ] 
vote buffer [ 50 ] 
vote buffer [ 32 ] 
vote buffer [ 53 ] 
vote buffer [ 32 ] 

Je suis en train d'obtenir l'équivalent int de ces Char qui sont dans la mémoire tampon à comparer. Comme vous pouvez le voir, il ne sera jamais vrai dans l'instruction if car la plage est beaucoup plus grande.

J'ai essayé de lancer vers (int). Cependant, cela n'a pas résolu le problème. Je suppose que je pourrais calculer à partir du jeu de caractères ASCII. Cependant, je préférerais ne pas ajouter plus de complexité si je ne peux pas m'en empêcher.

Un grand merci pour tous les conseils,

+1

Je ne comprends pas votre problème. Pour sûr, le tampon de vote [0] qui est 51, est supérieur à NUMBER_OF_CANDIDATES, soit 7. Pourriez-vous être un peu plus précis? – codymanix

+0

51 est le caractère ascii 3. J'ai donc besoin de comparer 3 avec NUMBER_OF_CANDIDATES. Merci. – ant2009

Répondre

3

Si vous voulez juste convertir les caractères simples à int, vous pouvez utiliser c - '0' (ce qui équivaut à c - 48). Si vous voulez convertir des chaînes de plus d'un seul caractère, utilisez sscanf()

2

Il n'y a rien construit à la bibliothèque standard pour transformer un char en un int. C'est parce que la plupart des int ne rentrent pas dans un char. Il y a cependant plusieurs façons de transformer une chaîne en int, parce que c'est beaucoup plus communément fait. Vous pouvez facilement les utiliser en copiant chaque char dans un premier élément de longueur 2 array avec le deuxième caractère 0, et en l'utilisant comme entrée pour atoi(), sscanf() ou strtol(). (Je vous recommande l'un des deux derniers dans un véritable programme, car ils permettent la vérification des erreurs.)

char buffer[2] = {0,0}; 
int i; 

for (i = 0; i < vote_count; ++i) { 
    int vote; 
    buffer[0] = vote_data.vote_buff[i]; 
    vote = atoi(buffer); 
    /* handle vote */ 
} 

En utilisant les valeurs ASCII et en soustrayant '0' est certainement une option viable. Tout jeu de caractères raisonnable aura les chiffres dans l'ordre.

Meilleur encore serait de changer l'interface de sorte que votre routine ne reçoit pas un tableau de char, mais un tableau de int. Les interfaces externes du programme devraient être responsables de la désinfection des entrées et de leur transformation en quelque chose de facile à traiter. Actuellement, il n'y a aucun moyen de changer facilement le programme pour soutenir plus de dix candidats. Laisser les routines d'entrée stocker int s corrige cela.

5

Vous pouvez utiliser atoi pour convertir des chaînes en entiers. Char et int sont les mêmes dans C

int main (int argc, char** argv) 
{ 
int n=65; 


char* String; 

String="1234"; 


printf("String: %s - Integer: %d\n", String, atoi(String)); 


printf("int %d is char: %c\n ", n, n); 

}