Описание:
Преобразуюет число в строку.
Параметры:
num - число, которое нужно преобразовать
buffer - строковая переменная, в которую будет записан результат
size - размер строковой переменной (необязательный параметр)
Возвращаемое значение:
Длина числа в строковом представлении.
Также возвращает строковое представление числа в buffer.
Плюсы реализации:- Функция проста в использовании
- С использованием JIT работает более 10 раз быстрее, чем format
- Нет багов которые есть в функциях valstr (зависание сервера при попытке вывода больших чисел) и format (вывод только знака "-" вместо "-2147483648")
Минусы реализации:
Код:
stock itos(num, buffer[], size=sizeof(buffer))
{ // by Daniel_Cortez \\pro-pawn.ru
new fix_cellmin = (num == cellmin) ? ++num : 0;
new pos = 0;
if(num < 0)
buffer[0] = '-', pos++, num = -num;
{
new x = num;
do{
x /= 10;
pos++;
}while(x);
}
buffer[(--size<pos) ? size : pos] = EOS;
new len = (size>pos) ? pos : size;
new mod;
do{
/*if(--pos < size)
buffer[pos] = '0'+num%10;
num /= 10;*/
// make 1 "sdiv" operation instead of 2
#emit load.s.pri num
#emit const.alt 10
#emit sdiv
#emit stor.s.pri num
#emit stor.s.alt mod
if(--pos < size)
buffer[pos] = '0'+mod;
}while(num);
if(fix_cellmin)
buffer[10]++;
return len;
}
Пример использования:
// Вывод имени игрока и его ID без использования format().
// Пример результата: "Daniel_Cortez (0)".
CMD:myname(playerid, params[])
{
new string[MAX_PLAYER_NAME+2+11+1+1];
string[len++] = ' ', string[len++] = '(';
len += itos(playerid, string[len], 12);
string[len] = ')', string[len+1] = EOS;
}
Автор: Daniel_Cortez
Копирование данной статьи на других порталах без разрешения автора запрещено!