Math::BaseCalc - Convert numbers between various bases
version 1.019
use Math::BaseCalc;
my $calc = new Math::BaseCalc(digits => [0,1]); #Binary
my $bin_string = $calc->to_base(465); # Convert 465 to binary
$calc->digits('oct'); # Octal
my $number = $calc->from_base('1574'); # Convert octal 1574 to decimal
This module facilitates the conversion of numbers between various number bases.
You may define your own digit sets, or use any of several predefined digit
sets.
The
to_base() and
from_base() methods convert between Perl numbers
and strings which represent these numbers in other bases. For instance, if
you're using the binary digit set [0,1], $calc->
to_base(5) will
return the string "101". $calc->from_base("101") will
return the number 5.
To convert between, say, base 7 and base 36, use the 2-step process of first
converting to a Perl number, then to the desired base for the result:
$calc7 = new Math::BaseCalc(digits=>[0..6]);
$calc36 = new Math::BaseCalc(digits=>[0..9,'a'..'z']);
$in_base_36 = $calc36->to_base( $calc7->from_base('3506') );
If you just need to handle regular octal & hexdecimal strings, you probably
don't need this module. See the
sprintf(),
oct(), and
hex() Perl functions.
- •
- new Math::BaseCalc
- •
- new Math::BaseCalc(digits=>...)
Create a new base calculator. You may specify the digit set to use, by
either giving the digits in a list reference (in increasing order, with
the 'zero' character first in the list) or by specifying the name of one
of the predefined digit sets (see the digit() method below).
If your digit set includes the character "-", then a dash at the
beginning of a number will no longer signify a negative number.
- •
- $calc->to_base(NUMBER)
Converts a number to a string representing that number in the associated
base.
If "NUMBER" is a "Math::BigInt" object,
"to_base()" will still work fine and give you an exact result
string.
- •
- $calc->from_base(STRING)
Converts a string representing a number in the associated base to a Perl
integer. The behavior when fed strings with characters not in $calc's
digit set is currently undefined.
If "STRING" converts to a number too large for perl's integer
representation, beware that the result may be auto-converted to a
floating-point representation and thus only be an approximation.
- •
- $calc->digits
- •
- $calc->digits(...)
Get/set the current digit set of the calculator. With no arguments, simply
returns a list of the characters that make up the current digit set. To
change the current digit set, pass a list reference containing the new
digits, or the name of a predefined digit set. Currently the predefined
digit sets are:
bin => [0,1],
hex => [0..9,'a'..'f'],
HEX => [0..9,'A'..'F'],
oct => [0..7],
64 => ['A'..'Z','a'..'z',0..9,'+','/'],
62 => [0..9,'a'..'z','A'..'Z'],
Examples:
$calc->digits('bin');
$calc->digits([0..7]);
$calc->digits([qw(w a l d o)]);
If any of your "digits" has more than one character, the behavior
is currently undefined.
Ken Williams, kwilliams@cpan.org
This is free software in the colloquial nice-guy sense of the word. Copyright
(c) 1999, Ken Williams. You may redistribute and/or modify it under the same
terms as Perl itself.
perl(1).