2012-07-24 58 views
0

即時通訊嘗試混淆vb.net中的字符串並在javascript中解除混淆。在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)     
} 

任何人都可以提出在那裏我犯的錯誤..

+0

你能提供一個示例字符串,它是混淆的夥伴。或者一些例子可能... – sq2 2012-07-24 06:13:53

+0

@ user1547670:如何在第二個循環之前初始化變量s? 「s ='s'+ ...」將不起作用,如果s未定義的權利? – TWickz 2012-07-24 08:00:28

回答

0

那麼,對於一兩件事,JavaScript字符串編號從0開始,而不是1和你for (j=1; j<4; j++)循環只會從1數到3無妨;您想要從0到3(j=0j<4)或1到4(j=1j<=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) 
    } 
} 
0

第一明顯的區別是,在vb.net中使用整數除法,而在JavaScript中你是不是......

使用

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

第二是Mid開始從0

從1而 subst開始計數

所以使用

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

或簡化

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

最後的循環,使用<時不使用最後的數字......而from.. to使用的最後一個號碼以及(所以使用<=

so allgether together

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); 
    } 
} 
+0

@MarkReed你試過你說的嗎?我在第一種情況下獲得'0,1,2',在第二種情況下獲得'0,1'..(*和那應該是.. *)看看http://jsfiddle.net/n5ttE/和控制檯輸出.. – 2012-07-24 08:00:43

+0

當然你是對的;當2 <2爲假時,2 <2.25爲真。我撤回了我的反對意見。 – 2012-07-27 18:44:22