C# 如何解决校验数组的索引和长度?

C# 如何解决校验数组的索引和长度?,c#,byte,converters,C#,Byte,Converters,错误消息:系统。ArgumentException:“目标数组不够长,无法复制集合中的所有项。检查数组索引和长度。' public static string PassConv(string Password) { int iLoop; int iL; int iTotal; int iValue; string sPassConv; iL = 3; iTotal = 0; for (iLoop = 1; iLoop <=

错误消息:系统。ArgumentException:“目标数组不够长,无法复制集合中的所有项。检查数组索引和长度。'

public static string PassConv(string Password)
{
    int iLoop;
    int iL;
    int iTotal;
    int iValue;
    string sPassConv;

    iL = 3;
    iTotal = 0;

    for (iLoop = 1; iLoop <= Password.Length; iLoop++) {

        string sNo = Password.Substring(iLoop-1,1);

        byte[] asciiBytes = Encoding.ASCII.GetBytes(sNo);

        iValue = BitConverter.ToInt32(asciiBytes, 0); ---->**Error**

        iTotal = iTotal + iValue * (iL + iLoop - 1);  

        sPassConv = iTotal.ToString();

    }
    return sPassConv;
}
公共静态字符串PassConv(字符串密码)
{
int iLoop;
int iL;
国际贸易总公司;
国际竞争力;
字符串sPassConv;
iL=3;
iTotal=0;
对于(iLoop=1;iLoop**错误**
iTotal=iTotal+iValue*(iL+iLoop-1);
sPassConv=iTotal.ToString();
}
返回sPassConv;
}

请帮忙
谢谢

由于有这么多冗余代码,我试图达到你的想法。通过使用:

  • SubString
    甚至导出每个字符
    Encoding.ASCII.GetBytes
    可以从这些字符返回所有字节数组
  • 位转换器
    也应为4字节二进制输入 这个函数似乎没有任何帮助
  • 声明iLoop=1,但内部循环不执行iLoop-1
  • sPassConv
    多次从iTotal获取值,应该放在循环之外
代码中的快速修复:

public static string PassConv(string Password)
{
    int iLoop;
    int iL;
    int iTotal;
    int iValue;
    string sPassConv = "";

    iL = 3;
    iTotal = 0;

    for (iLoop = 1; iLoop <= Password.Length; iLoop++)
    {

        string sNo = Password.Substring(iLoop - 1, 1);

        iValue = Encoding.ASCII.GetBytes(sNo)[0];

        iTotal = iTotal + iValue * (iL + iLoop - 1);

        sPassConv = iTotal.ToString();

    }
    return sPassConv;
}
结果呢

public static void MainFunc()
{
    Console.WriteLine(PassConv("ABCD")); // 1202
    Console.WriteLine(PassConv2("ABCD")); // 1202
    Console.WriteLine(PassConv3("ABCD")); // 1202
}

希望有帮助!

你到底想在这里做什么?现在你正在从字符串中提取一个字符(
密码
),使用ASCII编码将其编码为字节,然后尝试将该字节数据视为包含整数的4字节二进制值。由于您使用ASCII,我希望
asciiBytes
的长度可能始终为1。我假设您真的想要?啊,您似乎想要。
public static string PassConv3(string Password, int iL = 3)
{
    int iTotal = 0;

    for (var iLoop = 0; iLoop < Password.Length; iLoop++)
    {
        iTotal += Password[iLoop] * (iL + iLoop);
    }
    return iTotal.ToString();
}
public static void MainFunc()
{
    Console.WriteLine(PassConv("ABCD")); // 1202
    Console.WriteLine(PassConv2("ABCD")); // 1202
    Console.WriteLine(PassConv3("ABCD")); // 1202
}