x
Solved

# Module to convert any multiple of bytes to any other multiple?

Posted on 2000-03-09
Medium Priority
214 Views
Is there a module that can handle conversion from any multiple of byte to any other multiple?  For example

\$GB = &convert(kB,GB,\$num);

This sub would take the first arg as what \$num IS (a # of kB) and transform to GB.

\$kB = &convert(GB,kB,\$num);

This would take \$num understood to be in GB and convert to kB...

The idea is faily simple but the multiples get annoying to have to account for all cases...?
0
• 3

LVL 3

Author Comment

ID: 2602416
Well I though about and came up with this code:

sub convert_k(\$\$\$)
{
(\$from,\$to,\$number) = @_;

#Set up hash for math conversions between bytes - kB and MB GB
\$byteMath{"B"} = 1;

\$byteMath{"kB"} = 2;

\$byteMath{"MB"} = 3;

\$byteMath{"GB"} = 4;

\$byte_multiple = 1024;

\$power = \$byteMath{\$from} - \$byteMath{\$to};

return \$number * (\$byte_multiple ** \$power);
}

I had hoped to not have to right the code as no idea came to mind and then it hit me.  I would still be interested to know if a modual exists.  But the code above is good so take it if it interests you!
0

LVL 3

Author Comment

ID: 2602431
A stupid but good improvment:

#!/usr/local/bin/perl

print &convert_k(\$ARGV[0],\$ARGV[1],\$ARGV[2]);

sub convert_k(\$\$\$)
{
(\$from,\$to,\$number) = @_;

\$from      = uc(\$from);

\$to      = uc(\$to);

#Set up hash for math conversions between bytes - kB and MB GB
\$byteMath{"B"} = 1;

\$byteMath{"KB"} = 2;

\$byteMath{"MB"} = 3;

\$byteMath{"GB"} = 4;

\$byte_multiple = 1024;

\$power = \$byteMath{\$from} - \$byteMath{\$to};

return \$number * (\$byte_multiple ** \$power);
}
0

LVL 3

Accepted Solution

monas earned 400 total points
ID: 2602444
package KMGconv;
%mult =(
B=>1,
kB=>1024,
MB=>1024*1024,
GB=>1024*1024*1024,
TB=>1024*1024*1024*1024,
);

sub  convert{
my(\$from, \$to, \$amount)=@_;
return \$amount*\$mult{\$from}/\$mult{\$to};
}

-------------------------
use KMGconv;

print KMGconv::convert(MB,kB, 12);

--------------------------

you can define more constant, or use 1000's if you prefer.

Good Look!
0

LVL 3

Author Comment

ID: 2602522
Thank you!  Very nice though I'm still curious if one already exists  just to see how "they" chose to do it...
0

## Featured Post

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.