Files
SteamWare/SteamWareLib/calc.cs
T
2018-03-17 09:47:02 +01:00

82 lines
2.6 KiB
C#

using System;
namespace SteamWare
{
/// <summary>
/// classe con funzioni specifiche di calcolo
/// </summary>
public class calcoli
{
/// <summary>
/// inizializzazione classe
/// </summary>
protected calcoli()
{
}
/// <summary>
/// elenco dei caratteri base 36: 0..9A..Z
/// </summary>
protected String baseCharList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
/// <summary>
/// converte un intero in un numero a base 36 (0..9A..Z)
/// </summary>
/// <param name="num">num intero da convertire</param>
/// <param name="nBase">base, max 36 (0..9A..Z)</param>
/// <returns></returns>
public String ConvertToBase(int num, int nBase)
{
// check if we can convert to another base
if (nBase < 2 || nBase > baseCharList.Length)
return "";
int r;
String newNumber = "";
// in r we have the offset of the char that was converted to the new base
while (num >= nBase)
{
r = num % nBase;
newNumber = baseCharList[r] + newNumber;
num = num / nBase;
}
// the last number to convert
newNumber = baseCharList[num] + newNumber;
return newNumber;
}
/// <summary>
/// converte da base di dimensione nBase a valore intero
/// </summary>
/// <param name="valore">valore in formato nBase</param>
/// <param name="nBase">base, max 36 (0..9A..Z)</param>
/// <returns></returns>
public int ConvertFromBase(string valore, int nBase)
{
int answ = 0;
int moduloPos = 0;
int valorePos = 0;
if (nBase < 2 || nBase > baseCharList.Length)
return answ; // errore di base...
// percorro il mio vaore string e ri-compongo il numero INT...
for (int i = 0; i < valore.Length; i++)
{
// converto il valore in formato nBase in valore intero da moltiplcare x la base...
moduloPos = baseCharList.IndexOf(valore[valore.Length - i - 1]);
valorePos = Convert.ToInt32(Math.Pow(Convert.ToDouble(nBase), Convert.ToDouble(i)));
// leggo da sx con potenze crescenti della base
answ = answ + valorePos * moduloPos;
}
return answ;
}
/// <summary>
/// metodo di accesso singleton
/// </summary>
public static calcoli obj = new calcoli();
}
}