Как эффективно увеличить значение в алфавите

Исправлено: Мое расширение Java Cryptography Extension (JCE) Неограниченная сила. Файлы политики устаревания устарели. Я обновил их, и расширение теперь работает. Далее следуют шаги: java.lang.SecurityException: файлы политики юрисдикции не подписаны доверенным подписывающим лицом

-1
задан user10869858 19 January 2019 в 01:44
поделиться

1 ответ

@tehhowch совершенно прав, вместо того, чтобы делать гексагон (база 16), вы, по сути, хотите заняться математикой base-n. С указанным набором символов это будет математика по основанию 33 (если вы включите символ 0)

Каждое десятичное число представляет n ^ x степень. Это легко с десятичной. 100 - это 10 ^ 2, а 1000 - это 10 ^ 3. И вот что такое логарифм: log (1000) base 10 = 3, потому что 10 ^ 3 = 1000.

К счастью, мы можем получить журнал любой базы, выполнив log (n) / log (base). Отсюда следующая функция:

function convert(number) {
    var chars = '0abcdefghijklmnopABCDEFG123456789',
        base = chars.length, i = number, str = '',
        exp = Math.floor(Math.log(i)/Math.log(base))+1;
    while(exp--) {
        var bexp = Math.pow(base, exp);
        var j = Math.floor(i/bexp);
        i -= j*bexp;
        str += chars[j];
    }
    return str;
}
convert(90014234); // "bi62Gb"
convert(791424) // "F01B"
convert(23423); // "Ep3"
convert(33); // "a0"

Вы можете проверить метод, используя более общий набор символов, такой как шестнадцатеричный (основание 16), и убедившись, что числа выходят правильно. Вы бы подставили var chars = '0123456789abcdef' в функцию. Затем мы указываем шестнадцатеричное число и проверяем соответствие нашего вывода:

convert(0xdd5439af); // "dd5439af"
0
ответ дан David784 19 January 2019 в 01:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: