C# 如何在C语言中对4个字符的字符串进行零填充#

C# 如何在C语言中对4个字符的字符串进行零填充#,c#,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");

我使用以下类方法从数字创建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());
    }
private const string CharList=“0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
公共静态字符串编码(长输入){
如果(输入<0)抛出新ArgumentOutOfRangeException(“输入”,输入,“输入不能为负”);
char[]clistarr=CharList.ToCharArray();
var result=新堆栈();
while(输入!=0)
{
结果.推送(clistarr[输入%36]);
输入/=36;
}
返回新字符串(result.ToArray());
}

其中一个要求是字符串应始终填充零,并且最多应为四位数字。有谁能建议一种方法,我可以编码前导零,并限制函数,使其返回的值永远不会超过“ZZZZ”?C#中是否有一些函数可以做到这一点。对不起,这段代码有缩进。我不知道为什么它没有正确缩进

如果总是正好有四位数字,那真的很简单:

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*36L)-1L;
公共静态字符串EncodeBase36(长输入)
{
如果(输入<0L | |输入>MaxBase36Value)
{
抛出新ArgumentOutOfRangeException();
}
char[]chars=新字符[4];
字符[3]=字符列表[(int)(输入%36)];
字符[2]=字符表[(int)((输入/36)%36)];
字符[1]=字符表[(int)((输入/(36*36))%36)];
字符[0]=CharList[(int)((输入/(36*36*36))%36)];
返回新字符串(字符);
}
或使用循环:

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);
}
const long MaxBase36Value=(36L*36L*36L*36L*36L)-1L;
公共静态字符串EncodeBase36(长输入)
{
如果(输入<0L | |输入>MaxBase36Value)
{
抛出新ArgumentOutOfRangeException();
}
char[]chars=新字符[4];
对于(int i=3;i>=0;i--)
{
字符[i]=字符列表[(int)(输入%36)];
输入=输入/36;
}
返回新字符串(字符);
}

36进制中的ZZZZ是10进制中的1679615(36^4-1)。因此,您可以简单地测试数字是否大于此值并拒绝它


您可以使用pad。

您可以直接索引到字符串中,无需事先将其转换为数组。回答得很好。非常感谢。我有两条错误消息:chars[i]=input%36;给出消息错误3无法将类型“long”隐式转换为“char”。存在显式转换(是否缺少强制转换?)返回新字符串[chars];给出一条消息:错误4无法将类型“char[]”隐式转换为“int”Hello。仍在获取错误:无法将以下行的“long”转换为“int”:chars[i]=CharList[input%36]@梅丽莎:啊,好吧,现在检查一下。当然,这是表达最大值的更好方式。Doh:)