(Un)signed integers (16/32/64) & byte support C#
Code:
public static string Encode(IConvertible o)
{
try
{
byte[] data = BitConverter.GetBytes((dynamic)o);
string s = string.Empty;
for (int x = 1; x <= data.Length; x++)
s += (char)(byte)(64 + ((dynamic)o >> 6 * (data.Length - x) & 0x3f));
return s;
}
catch
{
return string.Empty;
}
}
public static dynamic Decode<T>(string s)
{
char[] val = s.ToArray();
return Decode<T>(val);
}
public static T Decode<T>(char[] val)
{
T total = (T)Convert.ChangeType(0, typeof(T));
int y = 0;
for (int x = (val.Length - 1); x >= 0; x--)
{
total += (dynamic)(T)Convert.ChangeType(((val[x] - 64) * (y > 0 ? Math.Pow(64, y) : 1)), typeof(T));
y++;
}
return total;
}
Example usage:
Code:
byte aNumber = 13;
string encodedString = base64Encoding.Encode(aNumber);
Console.WriteLine("Encoded: " + aNumber + ". Result: " + encodedString);
Console.WriteLine("Decoding: " + encodedString + ". Result: " + base64Encoding.Decode<int>(encodedString));
And I'm pretty sure it is vl64 encoding (wire encoding for old Habbo protocol) as base64 looks different.
@vista4life his version only supports nothing bigger than (2^12) -1