| Как работать с длинными числами? | 
|  | 
| 
| MERC | Дата: Вторник, 03.02.2015, 12:55:28 | Сообщение # 1 |  |   
|  |  | Сообщений: 9 Репутация: 0 [ +/- ]
 |  | Столкнулся с такой проблемой, SourcePawn не может работать с длинными числами, например 4294967295. Можно ли ка-то обойти это ограничение легким способом, или только писать свои функции калькуляции таких чисел (нужно умножение, сложение, сравнивание)?
 
 
 Сообщение отредактировал MERC - Вторник, 03.02.2015, 12:55:49 |  |  |  |  | 
| 
| Sallcom | Дата: Вторник, 03.02.2015, 12:59:25 | Сообщение # 2 |  |   
|  |  | Сообщений: 205 Репутация: 31 [ +/- ]
 |  | А что именно не получается? |  |  |  |  | 
| 
| хвостег | Дата: Вторник, 03.02.2015, 13:17:49 | Сообщение # 3 |  |   
|  |  | Сообщений: 161 Репутация: 53 [ +/- ]
 |  | 4294967295 = 4 байта = 0xFFFFFFFF = -1 (в сурспавне т.к это предел). если тебе нужны числа из диапазона int 64, можешь попробовать преобразовать их в строки. как складывать\вычитать\умножать строки, есть куча примеров, правда все они вряд ли подойдут. ну это если ты не используешь такие числа в БД или тебе не нужен SteamId64 для просмотра профиля....
 |  |  |  |  | 
| 
| MERC | Дата: Вторник, 03.02.2015, 14:23:38 | Сообщение # 4 |  |   
|  |  | Сообщений: 9 Репутация: 0 [ +/- ]
 |  | да, именно, эти числа в ДБ а если быть точнее - это это ИП адрес и с ними нужно работать, вообще это число получаеться после преобразования ИП адреса в число... Получается, что в SourcePawn нет аналога int64?Цитата хвостег (  ) ну это если ты не используешь такие числа в БД |  |  |  |  | 
| 
| хвостег | Дата: Вторник, 03.02.2015, 14:36:17 | Сообщение # 5 |  |   
|  |  | Сообщений: 161 Репутация: 53 [ +/- ]
 |  | я не думаю что ты используешь ipv6, поэтому тебе с головой хватит 32х битного числа для хранения ип адресов... |  |  |  |  | 
| 
| MERC | Дата: Вторник, 03.02.2015, 14:49:35 | Сообщение # 6 |  |   
|  |  | Сообщений: 9 Репутация: 0 [ +/- ]
 |  | Цитата хвостег (  ) хватит 32х битного числаint32 же ограничен до 2147483647 ?
 А у меня числа до 4294967295
 |  |  |  |  | 
| 
| serm | Дата: Вторник, 03.02.2015, 17:18:23 | Сообщение # 7 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата MERC (  ) Столкнулся с такой проблемой, SourcePawn не может работать с длинными числами, например 4294967295. Можно ли ка-то обойти это ограничение легким способом, или только писать свои функции калькуляции таких чисел (нужно умножение, сложение, сравнивание)?
Ничего сложного нету. Бери c++ vs и в бой.
 Делай вместо плагинов на sm расширения. Там полный доступ к серверной части + нет никаких ограничений в работе с числами.
 |  |  |  |  | 
| 
| MERC | Дата: Среда, 04.02.2015, 06:06:02 | Сообщение # 8 |  |   
|  |  | Сообщений: 9 Репутация: 0 [ +/- ]
 |  | Цитата serm (  ) Ничего сложного нету. Бери c++ vs и в бой. Делай вместо плагинов на sm расширения. Там полный доступ к серверной части + нет никаких ограничений в работе с числами.
 Не хватает базовых знаний и документации, можешь посоветовать какие-либо примеры и документацию по API?
 |  |  |  |  | 
| 
| serm | Дата: Среда, 04.02.2015, 12:19:26 | Сообщение # 9 |  |   
|  |  | Сообщений: 137 Репутация: 7 [ +/- ]
 |  | Цитата MERC (  ) Не хватает базовых знаний и документации, можешь посоветовать какие-либо примеры и документацию по API?api на оф.сайте sourcemod (Где-то в закладках была ссылка на api, но чет найти ее не могу)
 Примеры можешь взять тут https://forums.alliedmods.net/forumdisplay.php?f=134 (Чаще всего исходники прикладываются)
 |  |  |  |  | 
| 
| хвостег | Дата: Четверг, 05.02.2015, 00:38:14 | Сообщение # 10 |  |   
|  |  | Сообщений: 161 Репутация: 53 [ +/- ]
 |  | на кой черт ему писать расширение для см, если у него числа в 32х битном диапазоне ?! 
 Цитата MERC (  ) int32 же ограничен до 2147483647 ? А у меня числа до 4294967295
это называется слышу звон, да не знаю где он...
 
 int (__int32)
 4 - байт
 от -2 147 483 648 до 2 147 483 647
 
 unsigned int (unsigned __int32)
 4 - байт
 От 0 до 4 294 967 295
 
 А теперь простой пример как собрать ip из байт в число и наоборот из числа в байты....
 
 
 Код  public OnPluginStart()
 {
 new Ip = SIp(255, 255, 255, 255);
 
 new IpB[4];
 GIp(Ip, IpB);
 PrintToServer("B1: %d B2: %d B3: %d B4: %d", IpB[0], IpB[1], IpB[2], IpB[3]);
 }
 
 stock SIp(Ar1, Ar2, Ar3, Ar4)
 {
 return (Ar1 & 0xFF) << 24 | (Ar2 & 0xFF) << 16 | (Ar3 & 0xFF) << 8 | (Ar4 & 0xFF);
 }
 
 stock GIp(ip, out[4])
 {
 out[0] = (ip >> 24) & 0xFF;
 out[1] = (ip >> 16) & 0xFF;
 out[2] = (ip >> 8)  & 0xFF;
 out[3] =  ip        & 0xFF;
 }
 
 
 | Гости не могут скачивать файлы | 
 
 
 Сообщение отредактировал хвостег - Четверг, 05.02.2015, 01:01:10 |  |  |  |  |