鉴于我在base64中用于编码和解码的两个函数。 如果我编码然后解码,我只是这样做,然后我没有在我的输出和我的输入之间获得相同的值。
知道我做错了吗?
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)
您的第6行
var ascii = string_base64.charCodeAt(i);
应该是
var ascii = binary_string.charCodeAt(i);
答案 1 :(得分: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);