Non-decimal radices/Convert: Difference between revisions
Content added Content deleted
(→{{header|AutoHotkey}}: alternate implementation) |
|||
Line 681: | Line 681: | ||
=={{header|Perl}}== |
=={{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 |
<lang perl>sub digitize |
||
# Converts an integer to a single digit. |
# Converts an integer to a single digit. |
||
{my $i = shift; |
{my $i = shift; |
||
$i < 10 |
|||
? $i |
? $i |
||
: ('a' .. 'z')[$i - 10];} |
: ('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 |
sub to_base |
||
{my ($int, $radix) = @_; |
{my ($int, $radix) = @_; |
||
my $numeral = |
my $numeral = ''; |
||
do { |
|||
⚫ | |||
$numeral .= digitize($int % $radix); |
|||
⚫ | |||
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}}== |
=={{header|PHP}}== |