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)
- Форум Покритикуйте мою сериализацию в JSON (2014)
- Форум Perl: Как вычислить CRC8? (2008)
- Форум Perl - помогите найти ошибку (2013)