Задать вопрос
  • Как конвертировать из DEC в HEX ASCII?

    @res2001
    Developer, ex-admin
    Раз уж вы используете для преобразования в число strtol, то для обратного преобразования вполне можно использовать snprintf(asciiHex, sizeof(asciiHex), "%X", decVal).
    Хотя эти операции достаточно простые, можно было бы легко реализовать самому оба варианта.

    strtol ждет в первом параметре строку с завершающим нулем. У вас завершающий ноль в asciiHex отсутствует.
    Kolchislo как объявлена? Это строка с завершающим нулем? Возможно стоит использовать strcpy, а не memcpy.
    Зачем вам промежуточный массив asciiHex? Почему в strtol не использовать сразу kolchislo?
    Ответ написан
  • Как из массива байтов HEX сделать сделать DEC?

    wataru
    @wataru
    Разработчик на С++, экс-олимпиадник.
    Можно без перевода в десятичную систему считать. Столбиком, как в начальной школе. Это будет работать даже если ваши числа длиннее 4 байт.
    byte summ[N];  // N >= skoll_len+sprice_len.
    for (int i = 0; i < skoll_len; ++i ) {
      word carry = 0;
      for (int j = 0; j < sprice_len; ++j) {
        carry += summ[i+j] + (word)skoll[i] * sPrice[j];
        summ[i+j] = carry % 256;
        carry /= 256;
      }
      if (carry > 0)
        summ[x_len + y_len - 1] += carry;
    }


    Тут три неочевидных момента. При прибавлении одной строки из умножения столбиком все переносы считаются сразу одним проходом. Во-вторых, там может быть какой-то лишний перенос в конце, но только на одну дополнительную ячейку, потому что x < 256^x_len, y <256^x_len, а значит x*y < 256^(x_len+y_len), значит не будет никакой записи дальше ячейки x_len+y_len-1. И последнее, carry по пути нигде ни разу не переполнится, ибо максимальная сумма там может быть 255*255+255+255 < 256*256.

    P.s. Но если у вас числа уж очень длинные, то гуглите быстрое преобразование фурье + длинное умножение.
    Ответ написан
    3 комментария
  • Как из массива байтов HEX сделать сделать DEC?

    jcmvbkbc
    @jcmvbkbc
    "I'm here to consult you" © Dogbert
    как вернуть как было в новый массив

    byte summ[N];
    word s = x * y;
    
    for (i = 0; i < N; ++i) {
        summ[i] = s % 256;
        s /= 256;
    }
    Ответ написан
    2 комментария
  • Как создать Токен для Tinkoff?

    https://www.tinkoff.ru/kassa/dev/payments/#tag/Sta...
    Видимо таки какие-то параметры не те указываешь.

    Вот, как на самом деле формируется токен:
    https://www.tinkoff.ru/kassa/dev/payments/#section...
    Перед выполнением запроса MAPI проверяет, можно ли доверять его инициатору. Для этого сервер проверяет подпись запроса. В MAPI используется механизм подписи с помощью токена. Мерчант должен добавлять токен с каждому запросу, где это требуется.

    Токен - это не просто конкатенация. Это конкатенация + хэширование


    Она направила на документацию и на этот сайт https://tokentcs.web.app/

    Этот сайт как раз демонстрирует, как происходит генерация токена исходя из пароля и параметров запроса

    Вот прям пошаговый алгоритм:
    1. Собрать массив передаваемых данных в виде пар Ключ-Значения. В массив нужно добавить только параметры корневого объекта. Вложенные объекты и массивы не участвуют в расчете токена.

    В нашем случае это TerminalKey и PaymentId

    2. Добавить в массив пару {Password, Значение пароля}. Пароль можно найти в личном кабинете Мерчанта
    3. Отсортировать массив по алфавиту по ключу
    У нас получается Password, PaymentId, TerminalKey
    4. Конкатенировать только значения пар в одну строку
    У нас получается Password + PaymentID + TerminalKey
    ВАЖНО! payment_id нужно брать именно такой, какой тебе пришёл из API. Лишние или недостающие нули - всё сразу пойдёт по сам-знаешь-какому месту.

    5. Применить к строке хеш-функцию SHA-256
    В питоне для этого можно использовать hashlib
    Я хз каким образом без этого у belkinark заработало. Мб он что-то напутал.
    6. Добавить получившийся результат в значение параметра Token в тело запроса и отправить запрос
    Ответ написан
    8 комментариев
  • Как сделать кнопку с ссылкой в telebot python?

    enotcode
    @enotcode
    Front-end developer
    keyboard = types.InlineKeyboardMarkup()
    url_button = types.InlineKeyboardButton(text="Перейти к оплате", url="https://example.com")
    keyboard.add(url_button)
    
    @bot.message_handler(content_types=["text"])
    def foo(message):
        bot.send_message(message.chat.id, "Для пополнения баланса нажмите на кнопку ниже.", reply_markup=keyboard)
    Ответ написан
    2 комментария
  • TypeError: Object of type KeyboardButton is not JSON serializable (Aiogram), как решить?

    GTapok
    @GTapok
    Короче, анекдот, совершенно случайно починил
    У меня была такая же фигня, и вот что я сделал:

    classes = [
            types.InlineKeyboardButton(text='Мечник', callback_data='Мечник'),
            types.InlineKeyboardButton(text='Маг', callback_data='Маг'),
            types.InlineKeyboardButton(text='Лучник', callback_data='Лучник')
        ]

    (Всё условно)

    class_char = types.InlineKeyboardMarkup(row_width=2).add(*classes)

    В чём дело?
    В .add() я передал список со звёздочкой в начале. Без неё такую же ошибку ловил

    Не уверен, насколько это подходит к вопросу (годовой давности), но вот)
    Ответ написан
    5 комментариев