my @packCharacters = ('0'..'9', 'A'..'Z');
my %unpackCharacters;
my $decimalValue = 0;
map { $unpackCharacters{$_} = $decimalValue++ } @packCharacters;
sub packLongId
{
my $id = shift;
my $base = scalar @packCharacters;
my $packedId = '';
for ( my $currentValue = $id; $currentValue > 0; $currentValue = int($currentValue / $base) )
{
$packedId .= $packCharacters[ $currentValue % $base ];
}
return join "", reverse split //, $packedId;
}
sub unpackLongId
{
my $packedId = shift;
my $base = scalar @packCharacters;
my $id = 0;
my $currentPower = 1;
map
{
$id += $unpackCharacters{$_} * $currentPower;
$currentPower *= $base;
} reverse split //, $packedId;
return $id;
}
Переводит, вроде, нормально, но на больших числах начинает лажать.
packLong(11764992501273288845) => 2HDUTRXH5G84T
unpackLong("2HDUTRXH5G84T") => 11764992501273290285 ???
Накопал в цпане Math::BaseCalc, но он лажает точно так же
Ответ на:
комментарий
от asgard

Ответ на:
комментарий
от vilfred

Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Разворачивание массива (2014)
- Форум Громко ругаем реализацию List to CSV line (2014)
- Форум Perl вызов класса (2007)
- Форум Postgresql Perl SQL-injection (2011)
- Форум Объясните, пожалуйста, хеллоуворлд на перле (2018)
- Форум Perl, не работают скрипты с новыми библиотеками (2020)
- Форум Почему не работает скрипт? (2013)
- Форум Perl: Как вычислить CRC8? (2008)
- Форум Покритикуйте мою сериализацию в JSON (2014)
- Форум Perl - помогите найти ошибку (2013)