3e05eb3caf062dc9315b26d5028498f075841be4
[scilab.git] / scilab / modules / elementary_functions / src / c / convertbase.c
1 /*
2  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  * Copyright (C) 2011 - DIGITEO - Allan CORNET
4  * 
5  * This file must be used under the terms of the CeCILL.
6  * This source file is licensed as described in the file COPYING, which
7  * you should have received as part of this distribution.  The terms
8  * are also available at    
9  * http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
10  *
11  */
12 /*--------------------------------------------------------------------------*/ 
13 #include <string.h>
14 #include "convertbase.h"
15 /*--------------------------------------------------------------------------*/ 
16 #define char_a 'a'
17 #define char_A 'A'
18 #define char_z 'z'
19 #define char_Z 'Z'
20 #define char_zero '0'
21 #define char_nine '9'
22 /*--------------------------------------------------------------------------*/ 
23 double convertBase2Dec(const char *pStr, int numberbase, int *ierr)
24 {
25     double result = 0.;
26     *ierr = 1;
27
28     if (pStr)
29     {
30         size_t i = 0;
31         size_t len = strlen(pStr);
32         for (i = 0; i < len; i++)
33         {
34             if ((pStr[i] >= char_zero) && (pStr[i] <= char_nine))
35             {
36                 result = (numberbase * result) + (int)pStr[i] - char_zero;
37             }
38             else if ((pStr[i] >= char_A) && (pStr[i] <= char_Z))
39             {
40                 result = (numberbase * result) + (int)pStr[i] - char_A + 10;
41             }
42             else if ((pStr[i] >= char_a) && (pStr[i] <= char_z))
43             {
44                 result = (numberbase * result) + (int)pStr[i] - char_a + 10;
45             }
46             else
47             {
48                 *ierr = 1;
49                 return 0;
50             }
51         }
52         *ierr = 0;
53     }
54     return result;
55 }
56 /*--------------------------------------------------------------------------*/