if you've got a perl interpreter installed (that includes all you linux users), can you run this, and tell me if the answers seem right to you?
It converts numbers between different bases, try 2, 8, 10, and 16 to start with, as you can check those with windows calculator. It should also do any other number base, from 2 up through 36.
here's the program:
#!/usr/bin/perl
print "Start Base: ";
$base = <>;
chomp $base;
print "End Base: ";
$ebase = <>;
chomp $ebase;
print "Number: ";
$bin = <>;
chomp $bin;
$bin =~ s/^0+//;
@bin = split(//, $bin);
@bin = &convert(@bin);
$dec = shift @bin;
foreach $bit(@bin){
$dec *= $base;
$dec += $bit;
}
while(($dec / $ebase) >= 1){
$result .= $dec % $ebase;
$result .= "|";
$dec /= $ebase;
use POSIX;
$dec = floor($dec);
}
$result .= $dec;
print "Base $ebase: ", &unconvert($result);
sub convert {
my @ret_arr;
foreach $bit(@_){
if($bit !~ m/\d/){
$bit= uc $bit;
push @ret_arr, (ord $bit) - 55;
}
else{push @ret_arr, $bit}
}
return @ret_arr;
}
sub unconvert {
my @ret_arr;
my @temp;
@temp = split /\|/, $_[0];
foreach $bit(@temp){
if($bit > 9){unshift @ret_arr, chr ($bit +55)}
else{unshift @ret_arr, $bit}
}
return @ret_arr;
}
It converts numbers between different bases, try 2, 8, 10, and 16 to start with, as you can check those with windows calculator. It should also do any other number base, from 2 up through 36.
here's the program:
#!/usr/bin/perl
print "Start Base: ";
$base = <>;
chomp $base;
print "End Base: ";
$ebase = <>;
chomp $ebase;
print "Number: ";
$bin = <>;
chomp $bin;
$bin =~ s/^0+//;
@bin = split(//, $bin);
@bin = &convert(@bin);
$dec = shift @bin;
foreach $bit(@bin){
$dec *= $base;
$dec += $bit;
}
while(($dec / $ebase) >= 1){
$result .= $dec % $ebase;
$result .= "|";
$dec /= $ebase;
use POSIX;
$dec = floor($dec);
}
$result .= $dec;
print "Base $ebase: ", &unconvert($result);
sub convert {
my @ret_arr;
foreach $bit(@_){
if($bit !~ m/\d/){
$bit= uc $bit;
push @ret_arr, (ord $bit) - 55;
}
else{push @ret_arr, $bit}
}
return @ret_arr;
}
sub unconvert {
my @ret_arr;
my @temp;
@temp = split /\|/, $_[0];
foreach $bit(@temp){
if($bit > 9){unshift @ret_arr, chr ($bit +55)}
else{unshift @ret_arr, $bit}
}
return @ret_arr;
}