comparison scripts/strings/dec2base.m @ 11172:7e8ce65f73cf

Overhaul functions used to convert between number bases.
author Rik <octave@nomad.inbox5.com>
date Sun, 31 Oct 2010 07:30:15 -0700
parents 51beeeff9027
children c776f063fefe
comparison
equal deleted inserted replaced
11171:bc3fa8f6c4dc 11172:7e8ce65f73cf
43 ## @end group 43 ## @end group
44 ## @end example 44 ## @end example
45 ## 45 ##
46 ## The optional third argument, @var{len}, specifies the minimum 46 ## The optional third argument, @var{len}, specifies the minimum
47 ## number of digits in the result. 47 ## number of digits in the result.
48 ## @seealso{base2dec, dec2bin, bin2dec, hex2dec, dec2hex} 48 ## @seealso{base2dec, dec2bin, dec2hex}
49 ## @end deftypefn 49 ## @end deftypefn
50 50
51 ## Author: Daniel Calvelo <dcalvelo@yahoo.com> 51 ## Author: Daniel Calvelo <dcalvelo@yahoo.com>
52 ## Adapted-by: Paul Kienzle <pkienzle@kienzle.powernet.co.uk> 52 ## Adapted-by: Paul Kienzle <pkienzle@kienzle.powernet.co.uk>
53 53
70 if (ischar (base)) 70 if (ischar (base))
71 symbols = base; 71 symbols = base;
72 base = length (symbols); 72 base = length (symbols);
73 if (length (unique (symbols)) != base) 73 if (length (unique (symbols)) != base)
74 error ("dec2base: symbols representing digits must be unique"); 74 error ("dec2base: symbols representing digits must be unique");
75 endif
76 if (any (isspace (symbols)))
77 error ("dec2base: whitespace characters are not valid symbols");
75 endif 78 endif
76 elseif (! isscalar (base)) 79 elseif (! isscalar (base))
77 error ("dec2base: cannot convert from several bases at once"); 80 error ("dec2base: cannot convert from several bases at once");
78 elseif (base < 2 || base > length (symbols)) 81 elseif (base < 2 || base > length (symbols))
79 error ("dec2base: BASE must be between 2 and 36, or a string of symbols"); 82 error ("dec2base: BASE must be between 2 and 36, or a string of symbols");
138 %!assert(dec2base(0,2,4), "0000"); 141 %!assert(dec2base(0,2,4), "0000");
139 %!assert(dec2base(2^51-1,2), ... 142 %!assert(dec2base(2^51-1,2), ...
140 %! '111111111111111111111111111111111111111111111111111'); 143 %! '111111111111111111111111111111111111111111111111111');
141 %!assert(dec2base(uint64(2)^63-1,16), '7FFFFFFFFFFFFFFF'); 144 %!assert(dec2base(uint64(2)^63-1,16), '7FFFFFFFFFFFFFFF');
142 145
143 %!Test input validation 146 %%Test input validation
144 %!error dec2base () 147 %!error dec2base ()
145 %!error dec2base (1) 148 %!error dec2base (1)
146 %!error dec2base (1, 2, 3, 4) 149 %!error dec2base (1, 2, 3, 4)
147 %!error dec2base (-1) 150 %!error dec2base (-1)
148 %!error dec2base (1.1) 151 %!error dec2base (1.1)
149 %!error dec2base (1,"ABA") 152 %!error dec2base (1,"ABA")
153 %!error dec2base (1,"A B")
150 %!error dec2base (1, ones(2)) 154 %!error dec2base (1, ones(2))
151 %!error dec2base (1, 1) 155 %!error dec2base (1, 1)
152 %!error dec2base (1, 37) 156 %!error dec2base (1, 37)
153 157