1

请记住,我没有太多的编码经验...

我在访问数组时遇到问题。我正在使用返回数组的函数创建数组,这是一个示例:

int[] ArrayName = ReturnArray(string);

因此,既然 ArrayName 已经创建,它应该与 ReturnArray 返回的内容相同吗?

好吧,我在以下位置设置了一个断点:

int[] ArrayName = ReturnArray(string);

我可以看到 ArrayName 已正确创建。

好吧,当我尝试像这样访问 Array 的 1 个值时:

print(ArrayName[0]);

它应该只返回数组中的第一个值吗?好吧,不是!它返回一个多于一个值,并且该值甚至与 ReturnArray(string) 返回的值不匹配

这是“ReturnArray”函数:

    public static int[] ReturnArray(string t)
    {
        int i,ii,;
        string ba;
        string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
        List<int> list = new List<int>();
        for (i = 0; i < t.Length;i++)
        {
            ba = t.Substring(i, 1);
            ii = base64.IndexOf(ba) * 64;
            list.Add(ii);
        }
        return list.ToArray();
    }

添加了更多代码来响应评论

    private void outputLoop()
    {
        int i = 0;
            for (i = 0; i < 63; i++)
            {
                int te = lines[i].Length - 128;
                string tes = lines[i].Substring(te, 64);
                int[] ArrayName = ReturnArray(tes);
                _textlayer.DrawString(_font, ArrayName[i].ToString(), new Vector2(1100, i * 15), Color.White);
          }
    }
4

1 回答 1

2

这是一个工作示例。让我们解构。

static void Main( string[] args ) {
    // declare a variable and assign it to the return value of ReturnArray()
    var arr = ReturnArray( "foo" ); 

    // get the first value in the array
    var first = arr[0];
}

public static int[] ReturnArray( string t ) {
    int i, ii;
    string ba;
    string base64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
    List<int> list = new List<int>();
    for( i = 0; i < t.Length; i++ ) {
        ba = t.Substring( i, 1 );
        ii = base64.IndexOf( ba ) * 64;
        list.Add( ii );
    }
    return list.ToArray();
}

首先,如果您正在尝试制作 base 64 算法,它已经完成并且在 framework 中。如果您正在尝试学习,那很好,但是有一些例子可以继续。

ii = base64.IndexOf( ba ) * 64;

其次,您的代码确实返回了我所期望的,即来自IndexOf() * 64.

这个小例子产生1984, 2560, 2560了“foo”,索引 0 处的值是 1984。

“AAA”产生0, 0, 0,因为 IndexOf() 是 0 * 64。

如您所料,“BBB”产生64, 64, 64,因为 IndexOf() 返回 1,然后乘以 64。

更多调试代码(基于注释):

int[] arr = ReturnArray( "DADBALAMANAOAAABAYAZAaAbAcAdAeAff/BIBJBKBLBMBNBOBJBKBLBMBNBOBPf/AAABAoApAqArAsAt‌​AuAvf/f/+4+5f/f/f/AAABf/B4B5B6DQAZAaAbAcAdAeAZAa" );

// should print "192"
System.Diagnostics.Debug.WriteLine( arr[0] );
于 2012-08-31T02:52:37.587 回答