1

私はコーディングの経験があまりないことを覚えておいてください...

アレイへのアクセスに問題があります。配列を返す関数を使用して配列を作成しています。例を次に示します。

int[] ArrayName = ReturnArray(string);

ArrayNameが作成されたので、ReturnArrayが返したものと同じである必要がありますか?

さて、私はブレークポイントを右に設定しました:

int[] ArrayName = ReturnArray(string);

ArrayNameが正しく作成されたことがわかります。

次のように、配列の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アルゴリズムを作成しようとしている場合、それはすでにフレームワークで行われています。あなたが学ぼうとしているのなら、それは素晴らしいことですが、先に進むための例がそこにあります。

ii = base64.IndexOf( ba ) * 64;

第二に、あなたのコードは私が期待するもの、すなわちの積から来る数の配列を返しますIndexOf() * 64

この小さな例1984, 2560, 2560では「foo」が生成され、インデックス0の値は1984です。

0, 0, 0IndexOf()が0 * 64であるため、「AAA」はを生成します。

64, 64, 64ご想像のとおり、IndexOf()は1を返し、64を掛けるため、「BBB」はを生成します。

その他のデバッグコード(コメントに基づく):

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 に答える