Mercurial > hg > octave-lyh
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 |