如何在C#中填充4个字符串

时间:2011-12-01 05:34:37

标签: c#

我使用以下类方法从数字

创建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#中是否有一些功能可以做到这一点。对于此代码的缩进感到抱歉。我不确定为什么它没有正确缩进。

2 个答案:

答案 0 :(得分:5)

基础36中的ZZZZ在基础10(36 ^ 4-1)中是1679615。因此,您只需测试数字是否大于此值并拒绝它。

要填充,您可以使用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);
}