Voir la version complète : [NDS][Aide] Convertir char* en entier en C?
Bodom-Child
14/02/2006, 12h39
En c++ il existe la fonction atoi() pour cela mais je n'arrive pas à trouver son équivalent en C. Si quelqu'un a la réponse ça serait cool :) .
Note : oui, c'est pour pouvoir importer des niveaux Aztec Chalenge depuis un fichier texte avec PAFS :)
La fonction atoi marche en C également, il suffit d'inclure stdlib.h :)
Bodom, pourquoi tu fais pas juste u8 *tableau = (u8*)Pointeurs fichier de PAFS
Puis tableau[i] ??
Bodom-Child
14/02/2006, 13h09
Merci birslip, honte à moi lol...
-> Mollusk : Mmh, ça va bien convertir les données genre "09"? u8 ne prenant qu'un octet... Je saisis pas trop en fait, le cast va convertir directement le tout?
A la limite si j'utilise un u16, ça va bien me stocker deux char dans un u16?
:S :lol:
en fait je pensais que tu utiliserais une autre méthode d'exportation de niveau pour mettre avec PAFS... Au lieu d'exporter sous la forme d'un tableau écrit, exporte directement en écrivant les chiffres brutes dans ton fichier, sans header, sans rien. Ca évitera à ton programme de convertir de nombre brut à nombre écrit et à la DS de reconvertir de nombre écrit à nombre brut... et apres tu pourras lire les données directement dans ton tableau :)
Bodom-Child
14/02/2006, 13h37
C'est ce que je voulais faire, t'inquiète :).
J'ai testé mais ça ne marche pas. J'ai un ficher txt qui contient 0102030405 dans /Files.
Mon code :
u32 FileNumber = PA_FSInit();
u16 * tableau ;
tableau = (u16*)PA_PAFSFile(0) ;
int i ;
for(i = 0; i < 5; i++)
PA_OutputText(1, i + 1, i + 1, "%d", tableau[i]);
Je joins le fichier, et quand je l'exécute j'ai ces nombres là :
12592, 12848, 13104, 13360, 13616.
?
Alekmaul
14/02/2006, 13h49
ALors, 12592 = 49*256+48
Or, 48 = code ascii de '0'
49 = code ascii de '1'
idem pour 12848 avec '0' et '2'
En fait , ton tableau contient des caractères, donc 0 = 48, 1 = 49, 2= 50, etc ...
etc ... par rapport à ton tableau :)
C'est que 01 est stocké comme une information en texte, ce qui donne en hexa 0x3130 = 12592
Il faudrait que tu mettes les infos dans le fichier en binaire, que le fichier en hexa ressemble a ça:
0102030
Ou tu peux garder le fichier texte tous ça, mais e faisant une fonction:
u8 * tableau ;
tableau = (u8*)PA_PAFSFile(0) ;
u8 nombre = (tableau[i+1]-48)*10+(tableau[i]-48);
Et normalement, nombre te donnera le nombre de départ dans le fichier texte :)
[edit] Grillé par Alekmauk :D
Bodom-Child
14/02/2006, 14h01
Joli :), très bien vu même :bravo:
Mais j'ai trouvé une méthode plus simple :
Stocker le contenu du fichier dans un char*.
Créer un char* temporaire pour stocker les données 2 par 2, puis convertir ces données en u8 (j'ai testé, ça marche).
Par contre, si y'a moyen d'optimiser ça (Nesgba, si tu passes par là :p) :
char * texte = PA_PAFSFile(0) ;
char * temp ;
temp[0] = texte[0] ;
temp[1] = texte[1] ;
temp[2] = 0x00 ;
u8 i = atoi(temp) ;
(la boucle n'est pas encore faite).
Reste à voir si ça prends plus de temps que la méthode décrite plus haut (l'idée d'écrire le code du niveau en binaire est très bonne :) ).
Lol... franchement... Fais mettre tout ca en une seule valeur de 0 à 255 brute plutot que de passer par du texte !
Sinon, encore plus rapide que atoi je pense :
u8 nombre = (texte[0]-'0')*10 + (texte[1]-'0)';
;)
Bodom-Child
14/02/2006, 15h19
Ca marche nickel :), et y'a plus qu'une instruction comme ça :)
vBulletin® v.3.7.2, Copyright ©2000-2008, Jelsoft Enterprises Ltd. Tous droits réservés - Version française vbulletin-fr.org