2016-06-02 18 views
0

私は最も奇妙な問題を扱っています。私は縮小しようとしている大きな文字列(約500万バイト)を持っています。私はそれを縮小する前に、私はそのように「再構築」にしようとしている:ベース64の文字列が魔法的に大きくなります..時々

for(var i = 0; i < data.length; i++){ 
    var bb64 = ""; 
    var sb64 = ""; 

    //the big-ass string (~5 million bytes) 
    bb64 = data[i]; 
    //initially one sixth of the big-ass string 
    sb64 = bb64.substring(0, bb64.length/6); 

    var start = bb64.length/6; 
    var end = bb64.length; 

    //for testing, re-add the remaining 5/6 characters 
    for(var x = start; x < end; x++){ 
     sb64 += bb64[x] 
    } 

    //theoretically, these should be the same for each iteration of i 
    console.log(bb64.length); 
    console.log(sb64.length); 

    /*actual results: 
    i = 0: 
    bb64:5458944 
    sb64:5458944 

    i = 1: 
    bb64:5563292 
    sb64:42651908 

    i = 2: 
    bb64:5555276 
    sb64:42590452 
    */ 
    } 

私はその後、他の大きなお尻の文字列(約3万バイト)でそれをテストし、その結果は以下の通りであった:

i = 0: 
bb64:3132968 
sb64:24019424 

i = 1: 
bb64:3635916 
sb64:3635916 

i = 2: 
bb64:3791560 
sb64:29068632 

誰でも持っている任意手掛かりは何ですか?

ありがとうございます!

+1

長さ/ 6の値を丸めませんか?あなたは数字の最大値を超えていますか? – Kulvar

+0

haha​​hhaなんてヘック!私はちょうど丸められ、それは働いた。それは本当に違いを生むべきではありません - サイズの違いを見て、それは大きさのオーダーです!私はそれを受け入れることができるので、これを回答として投稿してください – Jona

+1

されています。^_^ – Kulvar

答えて

1

"長さ/ 6"除算は丸められません。丸められていない値をキーとして使用すると、予測できない結果になります。

+2

結果は非常に予測可能です。ループ内のすべての文字(入力の最後の5分の6)を「未定義」(別名9文字)に「置き換えます」。 'Math.floor(5563292/6)+ Math.ceil(5563292 * 5/6)* 9 === 42651908' – Thomas

+0

@Thomas Right!私はまったく同じものを入力していました! –

関連する問題