Rechercher : dans
Par :

[C] Convertir un tableau char en long

Dernière réponse le 7 avr 2009 à 15:30:09 Sylvain Wells, le 6 avr 2009 à 11:03:26 
 Signaler ce message aux modérateurs

Bonjour,
Je travaille sur un petit jeu en C et j'ai besoin de créer un tableau de scores. J'arrive facilement à convertir le score (long) obtenu en char[] et à l'enregistrer dans un .txt, mais lorsque je veux récupérer les scores pour les classer je ne parviens pas à les reconvertir en long.
Quelqu'un aurait-il une idée pour y parvenir ?

Configuration: Windows Vista
Firefox 3.0.8

Meilleures réponses pour « [C] Convertir un tableau char en long » dans :
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C++ - Les types de données VoirLes types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...

1

squall289, le 6 avr 2009 à 11:16:45

Le langage C doit pouvoir convertir un long en chaine de caractère nativement, puisque tout nombre est aussi une chaine de caractère. par contre une chaine de caractère n'est pas forcément un nombre.
Par exemple : 1600 est un int, et peut se convertir simplement en char par '1600'.
Par contre convertir 'mille six cent' en long c'est impossible (enfin si, mais pas directement par le langage).
c'est donc normal que tu n'arrives pas à forcer la conversion.
Il faut donc que tu récupères les scores en long dans ton programme, que tu les stockes et que tu les ressortes après.

Répondre à squall289

2

fiddy, le 6 avr 2009 à 12:04:27

Salut,
tout nombre est aussi une chaine de caractère. par contre une chaine de caractère n'est pas forcément un nombre.
Euh non. Ce sont deux éléments qui n'ont strictement rien à voir. L'un est un long, l'autre est un tableau de char...
Google is your friend

Répondre à fiddy

5

squall289, le 6 avr 2009 à 14:45:43

Je disais ça pour lui faire comprendre pourquoi le cast ne fonctionnait pas dans ce sens alors qu'il fonctionne dans l'autre.
Dans le sens ou char '12' fonctionne alors que long 'douze' ne fonctionne pas.. Bref Passons, le but est quand même de donner une solution à la question posé tout en expliquant pourquoi cela ne fonctionne pas.

Répondre à squall289

6

fiddy, le 6 avr 2009 à 15:11:51

Oui, mais sauf que le cast ne fonctionne pas dans l'autre sens non plus.
La chaîne de caractères "12" n'a aucun lien (ni de près ni de loin) avec le nombre 12.

e but est quand même de donner une solution à la question posé tout en expliquant pourquoi cela ne fonctionne pas
Oui je suis d'accord. Mais à condition de donner les bonnes explications ^^. Pour la solution, les postes #3 et #4 sont là (strtol, atol, etc).
Google is your friend

Répondre à fiddy

3

fiddy, le 6 avr 2009 à 12:06:36

Salut,
Donne un exemple de ce que tu as en long et de ce que tu as dans ton tableau de char qu'on puisse être sûr de parler de la même chose.
Sinon pour convertir une chaîne en long, tu peux utiliser strtol (ou à la limite atol et sscanf, mais moins bien).
Cdlt
Google is your friend

Répondre à fiddy

4

Char Snipeur, le 6 avr 2009 à 12:11:26

Salut.
regarde du coté des fonctions scanf() (scanf, sscanf et fscanf) C'est une des meilleur méthode.
Sinon, il y a la fonction atoi() ou atol(). Salutation ! (il faut bien que vous compreniez que j'ai TOUJ­OURS raison)
Char Snipeur

Répondre à Char Snipeur

7

Sylvain Wells, le 7 avr 2009 à 11:52:41

Par exemple :
J'ai un long égal à 12. Pour le stocker, je le convertit en chaîne de caractères pour l'enregistrer ; dans mon .txt, il y a donc écrit 12. mais comme c'est une chaîne de caractères, je ne peux pas la convertir en long, car 12 n'est plus une valeur mais un "mot", en quelque sorte.

L'idéal serait bien sûr de stocker mon long en tant que long, mais je ne vois pas comment faire...

Répondre à Sylvain Wells

8

fiddy, le 7 avr 2009 à 12:02:26

Dans ton fichier, tu peux lire avec fscanf(fp,"%ld",&nb);
Ou alors si tu as ta chaîne, tu peux convertir avec atol ou strtol.
Google is your friend

Répondre à fiddy

9

Char Snipeur, le 7 avr 2009 à 12:17:26

Salut.
Fiddy se répète (il est gentil), les solutions ont été donné, rien à dire de plus.
Pour enregistrer un entier directement, il faut déjà savoir ce qu'il y a d'autre dans ton fichier.
s'il n'y a que des entiers, enregistrés de façon séquentielle toujours identique, tu peux alors utiliser l'écriture dans un fichier au format binaire.
Si ma mémoire est bonne :

int f=open("toto.bin",O_WRONLY);
long l;
...
write(f,&l,sizeof(l));
Et pour lire
int f=open("toto.bin",O_RDONLY);
long l;
read(f,&l,sizeof(l));
Salutation ! (il faut bien que vous compreniez que j'ai TOUJOURS raison)
Char Snipeur

Répondre à Char Snipeur

10

fiddy, le 7 avr 2009 à 12:43:09

Merci pour le compliment lol.
Par contre, tu veux sûrement parler de fwrite et fread au lieu de write et read ^^.

//écriture
fwrite(&l,sizeof l,1,f);

//lecture
fread(&l,sizeof l,1,f);

Google is your friend

Répondre à fiddy

11

Char Snipeur, le 7 avr 2009 à 14:09:47

Non, en conjonction avec open() (et non fopen()) c'est read() et write() qu'il faut utiliser.
Ce soit les fonction générique d'écriture dans un flux. Salutation ! (il faut bien que vous compreniez que j'ai TOUJ­OURS raison)
Char Snipeur

Répondre à Char Snipeur

12

fiddy, le 7 avr 2009 à 14:22:25

Dommage d'utiliser des fonctions non standards alors fopen, fwrite et fread le sont...
Google is your friend

Répondre à fiddy

13

Char Snipeur, le 7 avr 2009 à 15:03:11

ça dépend de ce qu'on appel standard...
D'après les pages de manuel, fread(), conformité : ANSI X3.159-1989 (``ANSI C'')
et read(), conformité : SVr4, SVID, AT&T, POSIX, X/OPEN, BSD 4.3
POSIX, c'est pas mal comme standard, enfin, je ne sais pas trop comment s'arrangent ces différentes couches. Salutation ! (il faut bien que vous compreniez que j'ai TOUJOURS raison)
Char Snipeur

Répondre à Char Snipeur

14

 fiddy, le 7 avr 2009 à 15:30:09

Ce que l'on appelle standard c'est lorsque la fonction est issue des 24 headers ISO C.
unistd.h n'en faisant pas parti, les fonctions définies dedans ne sont pas standard ISO C.

Vaut mieux choisir une fonction standard C qu'une fonction POSIX (sous réserve d'avoir le choix bien sûr).
Google is your friend

Répondre à fiddy