T´as toujours la solution du maso: ta fonction inline asm!
Je ne te promets rien, je vais tenter de t´en écrire une ici, tu pourrait partir de ça:
/*************************************************
Array: pointeur à à ton string
Texte_return : pointeur à un string qui recevra la première partie,
avant le =
chiffre_return : pointeur à un int qui recevra la deuxième
ReturnValue : 0 = réussi, 1 = il y a eu un non-chiffre dans la deuxième partie, 2 = string incomplète
- ***********************************************
- ******/
int Split(char *array, char *texte_return, int *chiffre_return)
{
/*Détails importants:
61 ascii = ´=´
Rendu aux chiffres, on va se servir du décalage ascii de 48, car 0 = 48(´0´) - 48, 1 = 49(´1´) - 48, ect...
*/
__asm
{
xor ecx, ecx //Prépare ecx et ebx : par précaution
xor ebx, ebx
text_fill:
mov eax, array[ecx]//Prochain byte à analiser dans eax
cmp eax, 61 //Si on est rendu à =
je pass_eq //On passe au fillage des chiffres
cmp eax, 0 //Si c´est le caractère NULL
je null_err //On quitte avec un r/v de 2
mov texte_return[ecx], eax//Sinon, on passe le byte au texte_return
inc ecx //Et on incrémante notre comteur de bytes
pass_eq:
inc ecx//Un byte passé pour le charactère =
chiffre_fill:
mov eax, array[ecx]
//Si n´est pas un chiffre en ascii, on a une erreur
cmp eax, 48
jb chiffre_err
cmp eax, 57
ja chiffre_err
//Si c´est un caractère NULL, on quitte
cmp eax, 0
je norm_quit
//Sinon, on soustrait 48 au chiffre et on le passe au chiffrebuf, qui aura son dernier nombre de libre
sub eax, 48
add ebx, eax
//Et on le shifte à gauche, comme l´on ferait *2 en binaire
mul ebx, 10
inc ecx//On incrémente, et on recommence
norm_quit:
mov [chiffre_return], ebx
}
return 0;
null_err:
return 2;
chiffre_err:
return 1;
}
Mais je suis pratiquement sur qu´il existe une fonction de string.h qui pourrait faire ça... t´es sur d´avoir bien cherché?
En tout cas, si il n´y as vraiment rien, sert toi de mon exemple ; P
Kelios
---------