2

次の行をilSpyで取得しました

p[var1] = (t[var1] + z.c[var1 % z.c.Length]) % 'Ā';

p、t、c は char 配列 [] です。

私の質問は次のとおりです。どうすれば彼とキャラクターを追加できますか? t[var1]+zc[someNumber] は 2 文字であり、最後に数字「A」を付けて結果をモジュール化します。

4

3 に答える 3

4

charintはとare と同じように整数型なlongので、これらを足し合わせてインスタンス%の値に使用できます。char

ints と%それらを追加できるのと同じ方法で。

これは、上記が機能する理由を説明しています。

それが何を意味するかは別の質問であり、それほど明白ではありません。char範囲からして使われていたのかもしれませんが、一体型として使われています。これは小文字を大文字に変換する関数 (またはその逆) であるとは言えませんが、それ以上のコンテキストがなければ、それを伝えることは不可能です。

使用している逆コンパイラが IL を誤って解釈した (または完全に解釈できなかった) 可能性があり、IL と同等のものを提示している可能性がありますが、それは元のコードと同じではありません。

于 2012-03-06T11:14:39.873 に答える
0

Odedが指摘したように、ilSpy によって取得された式は構文的に有効ですが、元のコードは異なっていたと思います。

(U+0100, Latin Capital Letter A With Macron)のコードは 256 です。これは、 、、およびが ASCII などのシングルバイト エンコーディングの文字列を表しĀていることを示唆しています。次に、ilSpy から取得したコードは理にかなっています。例 (名前を 、、およびに変更しました):tcptcp

encrypted[index] = (source[index] + z.passPhrase[index % z.passPhrase.Length]) % 256;

ここには、元の文字列にパスフレーズを周期的に追加する単純な暗号化機能があります。

于 2012-03-06T11:42:59.643 に答える
0

文字を追加する場合、実際には Int operator+ を呼び出しています。これは、追加が char で定義されていないためです。文字も基本的には数値(表示が違うだけ)なので問題ありません。彼はおそらく、結果が 1 バイト文字の範囲になるように、結果を 'Ā' (数値: 256) で修飾します。

于 2012-03-06T11:21:08.607 に答える