Premium Реклама Spotlight Bundles Boost Банери Кредити
Основно Начало Сървъри Marketplace Форум Сървъри
Общности Хостинг Добави Auction Boost
Ресурси
Библиотеки Карти Видеа Магазин Bundles
Инструменти
Builder Demo CFG HUD
AMXX API
Вход Регистрация
TOP SERVER
[IG] Easy Surf | Ramp Fix | RANKS | REPLAYS
Counter-Strike 1.6
surf_flyin_fortress
40.160.19.36:27015
18.05 18:49
8/64
186ms
/ Библиотеки / number_convert.inc

number_convert.inc

Number Conversions

.inc 6.6 KB 343 реда 04.04.2026
Pawn / AMX Mod X
/*

// Number Conversions
// by Exolent

stock HexToDecimal( const szHex[ ] )

stock DecimalToHex( const iDecimal, szHexResult[ ], const iHexLen )

stock BinaryToDecimal( const szBinary[ ] )

stock DecimalToBinary( const iDecimal, szBinary[ ], const iBinaryLen )

stock BinaryToHex( const szBinary[ ], szHexResult[ ], const iHexLen )

stock HexToBinary( const szHex[ ], szBinaryResult[ ], const iBinaryLen )

// Retrives digits from a given value and returns the number of digits
// 
// @param	iValue - The value from which to get the digits
// @param	iDigits[ ] - The array to store the digits in (optional)
// @param	iDigitSize - The size of the array (optional)
// @param	iBase - The base of the number to find digits by (default is 10 for base 10 (decimal)) (optional)
// @param	bKeepDigitOrder - Decides to start from the right side of the decimal or left (default is false) (optional) (see post for more details)
// 
// @return	The total number of digits found
// 
stock GetDigits( const iValue, iDigits[ ] = "", const iDigitSize = 0, const iBase = 10, bool:bKeepDigitOrder = false )

stock ReverseArray( iArray[ ], const iSize )

*/

#include < amxmodx >

#if cellbits == 32
#define MAX_DECIMAL_DIGITS 10
#define MAX_BINARY_DIGITS 31
#define MAX_HEXADECIMAL_DIGITS 8
#else
#define MAX_DECIMAL_DIGITS 19
#define MAX_BINARY_DIGITS 63
#define MAX_HEXADECIMAL_DIGITS 16
#endif

stock const __HEXCHARS[ ] = "0123456789ABCDEF";

stock HexToDecimal( const szHex[ ] )
{
	new iLen = strlen( szHex );
	new iPos = 0;
	new cChar;
	new iValue;
	new iResult = 0;
	
	while( --iLen >= 0 )
	{
		cChar = szHex[ iLen ];
		
		switch( cChar )
		{
			case '0' .. '9':
			{
				iValue = cChar - '0';
			}
			case 'a' .. 'f':
			{
				iValue = 10 + cChar - 'a';
			}
			case 'A' .. 'F':
			{
				iValue = 10 + cChar - 'A';
			}
			default:
			{
				return -1;
			}
		}
		
		iResult += ( power( 16, iPos++ ) * iValue );
	}
	
	return iResult;
}

stock DecimalToHex( const iDecimal, szHexResult[ ], const iHexLen )
{
	new iTotal = GetDigits( iDecimal, szHexResult, iHexLen, 16, true );
	
	for( new i = 0; i < iTotal; i++ )
	{
		szHexResult[ i ] = __HEXCHARS[ szHexResult[ i ] ];
	}
	
	szHexResult[ iTotal ] = 0;
	
	return iTotal;
}

/*stock BinaryToDecimal( const iBinary )
{
	new iResult = 0;
	new iTemp = iBinary;
	new iValue;
	new iPos;
	
	while( iTemp > 0 )
	{
		iValue = iTemp % 10;
		
		if( iValue )
		{
			iResult |= ( 1 << iPos++ );
		}
		
		iTemp /= 10;
	}
	
	return iResult;
}

stock DecimalToBinary( const iDecimal )
{
	new iResult = 0;
	
	for( new i = MAX_BINARY_DIGITS - 1, iBit = 1 << i; i >= 0; iBit = 1 << ( --i ) )
	{
		if( iDecimal & iBit )
		{
			iResult += power( 10, i );
		}
	}
	
	return iResult;
}*/

stock BinaryToDecimal( const szBinary[ ] )
{
	new cChar;
	new iPos = 0;
	new iResult = 0;
	
	while( ( cChar = szBinary[ iPos ] ) )
	{
		if( cChar == '1' )
		{
			iResult |= ( 1 << iPos );
		}
		else if( cChar != '0' )
		{
			return -1;
		}
		
		iPos++;
	}
	
	return iResult;
}

stock DecimalToBinary( const iDecimal, szBinary[ ], const iBinaryLen )
{
	new iLen = 0;
	
	for( new i = min( MAX_BINARY_DIGITS - 1, iBinaryLen ), iBit = 1 << i; i >= 0; iBit = 1 << ( --i ) )
	{
		if( iDecimal & iBit )
		{
			szBinary[ iLen++ ] = '1';
		}
		else if( iLen )
		{
			szBinary[ iLen++ ] = '0';
		}
	}
	
	szBinary[ iLen ] = 0;
	
	return iLen;
}

/*stock BinaryToHex( const iBinary, szHexResult[ ], const iHexLen )
{
	new iByteDigits[ MAX_BINARY_DIGITS / 4 ];
	new iTotal = GetDigits( iBinary, iByteDigits, sizeof( iByteDigits ), 10000, true );
	
	new iPos;
	
	for( new i = 0; i < iTotal && iPos < iHexLen; i++ )
	{
		iPos += DecimalToHex( BinaryToDecimal( iByteDigits[ i ] ), szHexResult[ iPos ], iHexLen - iPos );
	}
	
	szHexResult[ iPos ] = 0;
	
	return iPos;
}

stock HexToBinary( const szHex[ ] )
{
	new iLen = strlen( szHex );
	new iPos;
	new cChar;
	new iValue;
	new iResult = 0;
	
	while( --iLen >= 0 )
	{
		cChar = szHex[ iLen ];
		
		switch( cChar )
		{
			case '0' .. '9':
			{
				iValue = cChar - '0';
			}
			case 'a' .. 'f':
			{
				iValue = 10 + cChar - 'a';
			}
			case 'A' .. 'F':
			{
				iValue = 10 + cChar - 'A';
			}
			default:
			{
				return -1;
			}
		}
		
		iResult += DecimalToBinary( power( 16, iPos++ ) * iValue );
	}
	
	return iResult;
}*/

stock BinaryToHex( const szBinary[ ], szHexResult[ ], const iHexLen )
{
	new iBinaryLen = strlen( szBinary );
	new szByte[ 5 ], iLen;
	new iByteValue;
	new iHexPos;
	
	for( new iPos = iBinaryLen - 1; iPos >= 0 && iHexPos < iHexLen; )
	{
		iLen = 0;
		
		while( iLen < 4 && iPos >= 0 )
		{
			szByte[ 4 - ( ++iLen ) ] = szBinary[ iPos-- ];
		}
		
		copy( szByte, iLen, szByte[ 4 - iLen ] );
		
		iByteValue = BinaryStringToDecimal( szByte );
		
		szHexResult[ iHexPos++ ] = __HEXCHARS[ iByteValue ];
	}
	
	ReverseArray( szHexResult, iHexPos );
	
	szHexResult[ iHexPos ] = 0;
	
	return iHexPos;
}

stock HexToBinary( const szHex[ ], szBinaryResult[ ], const iBinaryLen )
{
	new iHexPos;
	new cChar;
	new iValue;
	new iByteIndex;
	new iBinaryPos;
	
	while( ( cChar = szHex[ iHexPos ] ) && iBinaryPos < iBinaryLen )
	{
		switch( cChar )
		{
			case '0' .. '9':
			{
				iValue = cChar - '0';
			}
			case 'a' .. 'f':
			{
				iValue = 10 + cChar - 'a';
			}
			case 'A' .. 'F':
			{
				iValue = 10 + cChar - 'A';
			}
			default:
			{
				return -1;
			}
		}
		
		for( iByteIndex = 0; iByteIndex < 4 && iBinaryPos < iBinaryLen; iByteIndex++ )
		{
			szBinaryResult[ iBinaryPos++ ] = ( iValue & ( 1 << iByteIndex ) ) ? '1' : '0';
		}
		
		iHexPos++;
	}
	
	szBinaryResult[ iBinaryPos ] = 0;
	
	return iBinaryPos;
}

stock GetDigits( const iValue, iDigits[ ] = "", const iDigitSize = 0, const iBase = 10, bool:bKeepDigitOrder = false )
{
	new iDigitCount;
	new iTemp = iValue;
	
	while( iTemp > 0 && iDigitCount < iDigitSize )
	{
		iDigits[ iDigitCount++ ] = iTemp % iBase;
		iTemp /= iBase;
	}
	
	if( bKeepDigitOrder )
	{
		ReverseArray( iDigits, iDigitCount );
	}
	
	return iDigitCount;
}

stock ReverseArray( iArray[ ], const iSize )
{
	new iMiddle = iSize / 2;
	new iTemp;
	
	for( new i = 0, iOpposite = iSize - 1; i < iMiddle; i++, iOpposite-- )
	{
		iTemp = iArray[ i ];
		iArray[ i ] = iArray[ iOpposite ];
		iArray[ iOpposite ] = iTemp;
	}
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang11274\\ f0\\ fs16 \n\\ par }
*/
РЕКЛАМИРАЙ ПРИ НАС!
AMXX-BG.INFO
КАК ДА ИЗПОЛЗВАМ
Добави в началото на .sma файла:
#include <number_convert>
1. Изтегли
Свали файла от бутона по-горе
2. Копирай
Постави в scripting/include/
3. Включи
Добави #include директивата
4. Компилирай
Използвай amxxpc или scripting/compile.exe
PrivateServ.NET