我使用以下类方法从数字
创建Base36字符串private const string CharList = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static String Encode(long input) {
if (input < 0) throw new ArgumentOutOfRangeException("input", input, "input cannot be negative");
char[] clistarr = CharList.ToCharArray();
var result = new Stack<char>();
while (input != 0)
{
result.Push(clistarr[input % 36]);
input /= 36;
}
return new string(result.ToArray());
}
其中一个要求是字符串应始终用零填充,并且最多应为四位数。任何人都可以提出一种方法,我可以编码领先的零,并限制功能,所以它永远不会返回超过“ZZZZ”? C#中是否有一些功能可以做到这一点。对于此代码的缩进感到抱歉。我不确定为什么它没有正确缩进。
答案 0 :(得分:5)
要填充,您可以使用String.PadLeft
。
答案 1 :(得分:4)
如果总有完全四位数,那真的很容易:
const long MaxBase36Value = (36L * 36L * 36L * 36L) - 1L;
public static string EncodeBase36(long input)
{
if (input < 0L || input > MaxBase36Value)
{
throw new ArgumentOutOfRangeException();
}
char[] chars = new char[4];
chars[3] = CharList[(int) (input % 36)];
chars[2] = CharList[(int) ((input / 36) % 36)];
chars[1] = CharList[(int) ((input / (36 * 36)) % 36)];
chars[0] = CharList[(int) ((input / (36 * 36 * 36)) % 36)];
return new string(chars);
}
或使用循环:
const long MaxBase36Value = (36L * 36L * 36L * 36L) - 1L;
public static string EncodeBase36(long input)
{
if (input < 0L || input > MaxBase36Value)
{
throw new ArgumentOutOfRangeException();
}
char[] chars = new char[4];
for (int i = 3; i >= 0; i--)
{
chars[i] = CharList[(int) (input % 36)];
input = input / 36;
}
return new string(chars);
}