Non-decimal radices/Convert: Difference between revisions

(→‎{{header|AutoHotkey}}: alternate implementation)
Line 681:
 
=={{header|Perl}}==
To parse from a base:
Perl has some built-in capabilites for various conversions between decimal, hexadecimal, octal, and binary, but not other bases.
<lang perl>use POSIX;
 
my ($num, $n_unparsed) = POSIX::strtol('1a', 16);
$n_unparsed == 0 or die "invalid characters found";
print "$num\n"; # prints "26"</lang>
 
To format into a base:
<lang perl>sub digitize
# Converts an integer to a single digit.
{my $i = shift;
return $i < 10
? $i
: ('a' .. 'z')[$i - 10];}
 
sub undigitize
# Converts a digit to an integer.
{my $i = shift;
return $i =~ /\d/
? $i
: 10 + ord($i) - ord('a');}
 
sub to_base
{my ($int, $radix) = @_;
my $numeral = digitize($int % $radix)'';
do {
$numeral .= digitize($int % $radix)
while $intnumeral .= intdigitize($int /% $radix);
} while $numeralint .= digitizeint($int %/ $radix);
return scalar reverse $numeral;}</lang>
 
sub from_base
{my ($numeral, $radix) = @_;
$numeral = reverse $numeral;
my $int = 0;
for (my $n = 0 ; $numeral ; ++$n)
{$int += $radix**$n * undigitize substr($numeral, 0, 1, '');}
return $int;}</lang>
 
=={{header|PHP}}==
Anonymous user