Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 5 из 5

Тема: itos

  1. #1
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±

    itos

    Описание:
    Преобразуюет число в строку.

    Параметры:
    num - число, которое нужно преобразовать
    buffer - строковая переменная, в которую будет записан результат
    size - размер строковой переменной (необязательный параметр)

    Возвращаемое значение:
    Длина числа в строковом представлении.
    Также возвращает строковое представление числа в buffer.

    Плюсы реализации:
    • Функция проста в использовании
    • С использованием JIT работает более 10 раз быстрее, чем format
    • Нет багов которые есть в функциях valstr (зависание сервера при попытке вывода больших чисел) и format (вывод только знака "-" вместо "-2147483648")

    Минусы реализации:
    • N/A

    Код:
    1. stock itos(num, buffer[], size=sizeof(buffer))
    2. { // by Daniel_Cortez \\pro-pawn.ru
    3. new fix_cellmin = (num == cellmin) ? ++num : 0;
    4. new pos = 0;
    5. if(num < 0)
    6. buffer[0] = '-', pos++, num = -num;
    7. {
    8. new x = num;
    9. do{
    10. x /= 10;
    11. pos++;
    12. }while(x);
    13. }
    14. buffer[(--size<pos) ? size : pos] = EOS;
    15. new len = (size>pos) ? pos : size;
    16. new mod;
    17. do{
    18. /*if(--pos < size)
    19.   buffer[pos] = '0'+num%10;
    20.   num /= 10;*/
    21. // make 1 "sdiv" operation instead of 2
    22. #emit load.s.pri num
    23. #emit const.alt 10
    24. #emit sdiv
    25. #emit stor.s.pri num
    26. #emit stor.s.alt mod
    27. if(--pos < size)
    28. buffer[pos] = '0'+mod;
    29. }while(num);
    30. if(fix_cellmin)
    31. buffer[10]++;
    32. return len;
    33. }


    Пример использования:
    1. // Вывод имени игрока и его ID без использования format().
    2. // Пример результата: "Daniel_Cortez (0)".
    3. CMD:myname(playerid, params[])
    4. {
    5. new string[MAX_PLAYER_NAME+2+11+1+1];
    6. new len = GetPlayerName(playerid, string, sizeof(string);
    7. string[len++] = ' ', string[len++] = '(';
    8. len += itos(playerid, string[len], 12);
    9. string[len] = ')', string[len+1] = EOS;
    10. return SendClientMessage(playerid, -1, string);
    11. }


    Автор: Daniel_Cortez
    Специально для Pro-Pawn.ru
    Копирование данной статьи на других порталах без разрешения автора запрещено!
    Последний раз редактировалось Daniel_Cortez; 09.05.2015 в 10:58. Причина: подогнал описание под новый шаблон
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  2. 7 пользователя(ей) сказали cпасибо:
    Airon007 (27.07.2013) execution (13.07.2019) L0ndl3m (20.01.2014) Mike (27.07.2013) Osetin (27.07.2013) punkochel (18.11.2021) whale (21.03.2019)
  3. #2
    Аватар для execution
    Пользователь

    Статус
    Оффлайн
    Регистрация
    09.03.2018
    Сообщений
    255
    Репутация:
    24 ±
    Я правильно понимаю, что если массив заполнен некоторыми данными, то запишет в первую свободную ячейку?

  4. #3
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Нет, функция этого не делает. ИМХО, на самом деле не так уж и много сценариев использования этой функции: например, сделать отсчёт времени с показом через GameText, либо вывести текущую скорость машины и количество бензина в ней через TextDraw. В остальных случаях вы, скорее всего, захотите воспользоваться format(), чтобы не возиться с конкатенацией строк.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  5. Пользователь сказал cпасибо:
    execution (13.07.2019)
  6. #4
    Аватар для MassonNN
    Пользователь

    Статус
    Оффлайн
    Регистрация
    16.03.2018
    Адрес
    Москва
    Сообщений
    129
    Репутация:
    6 ±
    Велосипед ?

    https://wiki.sa-mp.com/wiki/Valstr

  7. #5
    Аватар для DeimoS
    Модератор?

    Статус
    Оффлайн
    Регистрация
    27.01.2014
    Адрес
    Восточный Мордор
    Сообщений
    5,588
    Репутация:
    1984 ±
    Цитата Сообщение от MassonNN Посмотреть сообщение
    А если тему внимательнее почитать?

    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение

    Плюсы реализации:
    • Функция проста в использовании
    • С использованием JIT работает более 10 раз быстрее, чем format
    • Нет багов которые есть в функциях valstr (зависание сервера при попытке вывода больших чисел) и format (вывод только знака "-" вместо "-2147483648")
    Особенно третий пункт (о чём, собственно, даже на wiki.sa-mp написано)
    Связаться со мной в VK можно через личные сообщения этой группы
    Заказы не принимаю

    Широко известно, что идеи стоят 0.8333 цента каждая (исходя из рыночной цены 10 центов за дюжину).
    Великих идей полно, на них нет спроса.
    Воплощение идеи в законченную игру требует долгой работы,
    таланта, терпения и креативности, не говоря уж о затратах денег, времени и ресурсов.
    Предложить идею просто, воплотить – вот в чём проблема

    Steve Pavlina

 

 

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •