|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/371.32 15 Feb 2001 15:09:59 To : Roman Terleev Subject : Re: функция --------------------------------------------------------------------------------
В твоём письме от Wed, 14 Feb 2001 15:26:38 +0300 написано:
RT> В общем есть необходимость
RT> преобразования чисел "байт" в читабельный вид.
RT> Hапример "1048576" как 1,000,000 байт. или "1073741824" как 1,000,000,000
RT> байт.
Для начала ты несешь чушь. 1048576 байт - это 1048576 байт, а никак не
1,000,000. Я еще поверю, что это 1 мегабайт.
Для потом, еще большим бредом выглядит алгоритм. Ты его пробовал запустить на,
скажем, 1099511627775 (1024^4-1, то есть 1023,1023,1023 по твоему алгоритму)
байтах? А 10000 раз?
sub format_bytes {
my $bytes = shift;
my $result = '';
if (int($bytes/1099511627776)) {
$result .= int($bytes/1099511627776).'`';
$bytes %= 1099511627776;
}
if ($result) {
$result .= sprintf("%04d`",int($bytes/1073741824));
} else {
$result .= int($bytes/1073741824).'`'
if int($bytes/1073741824);
}
$bytes %= 1073741824;
if ($result) {
$result .= sprintf("%04d`",int($bytes/1048576));
} else {
$result .= int($bytes/1048576).'`'
if int($bytes/1048576);
}
$bytes %= 1048576;
if ($result) {
$result .= sprintf("%04d`",int($bytes/1024));
} else {
$result .= int($bytes/1024).'`'
if int($bytes/1024);
}
$bytes %= 1024;
if ($result) {
$result .= sprintf("%04d`",$bytes);
} else {
$result .= $bytes;
}
return $result;
}
Только с терабайтами оно жить не будет. Во всяком случае на 32-битных
архитектурах.
--
Artem Chuprina E-mail: ran@ran.pp.ru
Programmer FIDO: 2:5020/371.32
Memonet Ltd. Phone: +7-095-284-1356
--- slrn/0.9.6.3-as (Linux)
* Origin: AKA с подствольным плюсомётом (2:5020/371.32)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/721940c68bc0d.html, оценка из 5, голосов 10
|