a0250c98422dfa438614f65dc9afb6c767b0d102
[scilab.git] / scilab / modules / elementary_functions / macros / bin2dec.sci
1 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
2 // Copyright (C) ???? - INRIA - Farid BELAHCENE
3 // Copyright (C) 2006 - INRIA - Pierre MARECHAL
4 // Copyright (C) 2011 - DIGITEO - Pierre MARECHAL
5 //
6 // This file must be used under the terms of the CeCILL.
7 // This source file is licensed as described in the file COPYING, which
8 // you should have received as part of this distribution.  The terms
9 // are also available at
10 // http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11
12 // =============================================================================
13 //
14 // BIN2dec function
15 // Given str a binary string, this function returns the decimal number whose the
16 // binary representation is given by str
17 //
18 // -Input :
19 //    str : a string (or a vector/matrix of strings), containing only characters
20 //         '1' and '0'
21 // -Output :
22 //    y : a scalar/vector/matrix
23 //
24 // F.Belahcene
25
26 // check the type of input argument
27
28 // 2006-06-26 : Modified by Pierre MARECHAL
29 // Check length of given string ( must be 47 bits or less )
30 // =============================================================================
31
32 function y = bin2dec(str)
33
34   rhs = argn(2);
35   if rhs <> 1 then
36     error(msprintf(gettext("%s: Wrong number of input argument(s): %d expected.\n"),"bin2dec", 1));
37   end
38
39   if type(str)<>10
40     error(msprintf(gettext("%s: Wrong type for input argument #%d: Matrix of strings expected.\n"),"bin2dec",1));
41   end
42
43   // delete all spaces included in the str
44   str = strsubst(str,' ','');
45
46   // check the str characters are only '0' or '1', and convert the binary str to corresponing decimal number
47   for i=1:prod(size(str))
48
49     ind1=strindex(str(i),'1')
50     ind0=strindex(str(i),'0')
51
52     if length(str(i)) <> sum([prod(size(ind0)) prod(size(ind1))]) then
53       error(msprintf(gettext("%s: Wrong value for input argument #%d: Matrix of strings made of zeros and ones expected.\n"),"bin2dec",1));
54     end
55
56     if length(str(i)) > 54 then
57       error(msprintf(gettext("%s: Wrong size for input argument #%d: Must be less than %d characters.\n"),"bin2dec",1,54));
58     end
59
60     if ~isempty(ind1)
61       ind1   = length(str(i))-ind1($:-1:1);
62       y($+1) = sum(2^ind1);
63     elseif ~isempty(ind0)
64       y($+1) = 0;
65     else
66       y($+1) = [];
67     end
68   end
69
70   y = matrix(y, size(str));
71
72 endfunction