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

Тема: itos

  1. #1
    Аватар для Daniel_Cortez
    new fuck_logic[0] = EOS;

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

    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. 4 пользователя(ей) сказали cпасибо:
    Airon007 (27.07.2013)L0ndl3m (20.01.2014)Mike (27.07.2013)Osetin (27.07.2013)
 

 

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

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

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

Ваши права

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