0

vb.netで文字列を難読化し、javascriptで難読化を解除しようとしています。

For i = 0 To Len(sData) / 4
    For j = 1 To 4
        ConvertData2 = ConvertData2 & Mid$(sData, (4 * i) + 5 - j, 1)
    Next j
Next i

上記のコードはvb.netでうまく機能します。JavaScriptで同等のコードが必要です

私は以下のものを試しましたが、うまくいきませんでした。

for (i = 0; i<(sData.length)/4; i++)
{
    for (j = 1;j<4;j++)
        s=s+sData.substr((4 * i) + 5 - j,1)                  
}

誰でも私が間違えた場所を提案できます..

4

2 に答える 2

0

一つには、Javascriptの文字列インデックスは1ではなく0から始まります。そして、for (j=1; j<4; j++)ループはとにかく1から3までしかカウントされません。0から3(j=0およびj<4)または1から4(j=1およびj<=4)のいずれかに移動します。

VBの直訳は次のようになります。

convertData2 = ''
for (var i=0; i < sData.length / 4; ++i) {
   for (var j=1; j <= 4; ++j) {
       convertData2 += sData.substr(4 * i + 4 - j, 1)
   }
}
于 2012-07-24T07:52:08.893 に答える
0

最初の明らかな違いは、vb.net では整数除算を使用し、javascript ではそうではないことです...

使用する

for(var i = 0, len = Math.floor(sData.length / 4); i<=len; i++)

2 つ目は、0 から開始しMidながら 1 からカウントを開始することです。subst

だから使う

s = s + sData.substr((4 * i) + 5 - j -1,1) 

または簡略化

s = s + sData.substr((4 * i) + 4 - j,1) 

最後に、ループを使用する場合は、最後の番号を使用<しないでください...from.. to最後の番号も使用します(使用します<=

一緒に

var s = ''; // define s (if not yet defined) other wise use s = '' to make sure it starts empty..
for(var i = 0, len = Math.floor(sData.length / 4); i <= len; i++) {
   for (var j = 1 ; j <= 4; j++) {
       s = s + sData.substr( (4 * i) + 4 - j,1);
   }
}
于 2012-07-24T07:53:49.227 に答える