Bonjour,

Je voudrais convertir un string en nombre entier non signé codé sur 32 bits.

J'ai donc créé ces fonctions
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
 
typedef enum _BOOL{
    FALSE = 0,
    TRUE = 1
} BOOL;
typedef int INT32;
typedef unsigned int UINT32;
typedef unsigned long long UINT64;
 
 
/**
 * @brief powUINT64(x, y) = x ^ y.
 * Fait un calcul d'un nombre à la puissance d'un autre.
 */
UINT64 powUINT64(UINT64 x, UINT64 y){
    UINT64 i;
    UINT64 val = 1;
 
    for (i=0; i < y; i++){
        val *= x;
    }
    return val;
}
 
 
/**
 * @brief Converti un string en UINT32 (base 10).
 * La chaine ne doit pas contenir d'espace sinon ça retourne une erreur.
 *
 * @return retourne TRUE si conversion réussite.
 */
BOOL convStrtoUINT32(char *str, int len, UINT32 *retVal){
    // valeur max d'un UINT32 = 4 294 967 295
    UINT64 val = 0;
    int index = 0;
 
    printf("convStrtoUINT32->str \"%s\", len %i\r\n", str, len); // debug
 
    if(len < 1){
        return FALSE;
    }
 
    if(len > 10){
        return FALSE;
    }
 
    while(len--){
        char valTmp = str[len];
 
        if((valTmp < '0') || (valTmp > '9')){
            return FALSE;
        }
 
        //printf("valTmp : %u, 10^%i=%llu => %llu\r\n", valTmp - '0', index, powUINT64(10, index), (valTmp - '0') * powUINT64(10, index)); // debug
        val += (valTmp - '0') * powUINT64(10, index);
        index++;
    }
 
    if(val > 0xFFFFFFFF){
      return FALSE;
    }
 
    *retVal = val;
    return TRUE;
}
Je voudrais que ça me retourne des erreurs si :
- il y a des espaces dans la chaine
- la chaine est erronée
- il y a un dépassement de taille

J'aimerai que le code soit optimisé pour un µControlleur 32 bits

Je ne vois pas qu'elle est la meilleurs solution à adopter (surtout pour la détection de dépassement de taille)
=> il faut que je passe sur des variables de 64 bits pendant le calcul ?

Merci d'avance,