Вы неправильно использовали Base64.
(System.Text.Encoding.ASCII.GetBytes(i.ToString())
Это создает последовательность байтов, которая содержит закодированное в base10 целое число, и кодирует ее снова в base64.Это явно неэффективно.
Вам нужно получить необработанные байты целого числа и кодировать их с помощью base64.Какая кодировка является наиболее эффективной, зависит от того, сколько символов вы хотите разрешить.Если вам нужно sho
И вы должны обрезать 0 байтов на одной стороне массива.
var bytes=BitConverter.GetBytes(input);
int len=8;
for(int i=7;i>=0;i--)
{
if(bytes[i]!=0)
{
len=i+1;
break;
}
}
string s=Convert.ToBase64String(bytes,0,len).ReplaceString('/','-');
Обратите внимание, что это не будет работать должным образом в системах с прямым порядком байтов.
Но, возможно, вам следует избегать кодирования байтов все вместе, и просто использовать целочисленные кодировки с более высоким основанием.
Простая версия может быть:
string digitChars="0123..."
while(i!=0)
{
int digit=i%digitChars.Length;
i/=digitChars.Length;
result=digitChars[digit]+result;
}