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

Тема: itos

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

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

    itos

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

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

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

    Плюсы реализации:
    • Функция проста в использовании
    • С использованием JIT работает до 13 раз быстрее, чем 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. Причина: подогнал описание под новый шаблон
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

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

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

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

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    1,979
    Репутация:
    2403 ±
    Нет, функция этого не делает. ИМХО, на самом деле не так уж и много сценариев использования этой функции: например, сделать отсчёт времени с показом через GameText, либо вывести текущую скорость машины и количество бензина в ней через TextDraw. В остальных случаях вы, скорее всего, захотите воспользоваться format(), чтобы не возиться с конкатенацией строк.
    Индивидуально в PM и Skype по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
    SA-MP 0.4 is a lie

  5. Пользователь сказал cпасибо:
    execution (13.07.2019)
 

 

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

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

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

Ваши права

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