2013-10-18 86 views
0

鑑於下面的兩個函數,我用base64編碼和解碼。 如果我編碼然後解碼,我只是這樣做,然後我沒有得到我的輸出和我的輸入之間相同的值。編碼然後在base64解碼不會輸出我的輸入arraybuffer

任何想法我做錯了什麼?

function _base64ToArrayBuffer(string_base64) { 
    var binary_string = window.atob(string_base64); 
    var len = binary_string.length; 
    var bytes = new Uint8Array(len); 
    for (var i = 0; i < len; i++)  { 
     var ascii = string_base64.charCodeAt(i); 
     bytes[i] = ascii; 
    } 
    return bytes.buffer; 
} 

function _arrayBufferToBase64(array_buffer) { 
    var binary = ''; 
    var bytes = new Uint8Array(array_buffer); 
    var len = bytes.byteLength; 
    for (var i = 0; i < len; i++)  { 
     binary += String.fromCharCode(bytes[ i ]) 
    } 
    return window.btoa(binary); 
} 



var input = my_ArrayBuffer; 
var raw_data_base64 = _arrayBufferToBase64(input); 
var ouput = _base64ToArrayBuffer(raw_data_base64); 
+0

你是對的,我還以爲你在做不同的東西。 –

回答

1

你的問題是_base64ToArrayBuffer

for (var i = 0; i < len; i++) { 
    var ascii = string_base64.charCodeAt(i); // THIS LINE 
    bytes[i] = ascii; 
} 

如果你想想什麼ArrayBuffer你回來實際上意味着(在charcodes方面)它是給你回Base64字符串

看起來你其實是想用

binary_string.charCodeAt(i); 
1

你的行號6

var ascii = string_base64.charCodeAt(i); 

應該

var ascii = binary_string.charCodeAt(i);