简体   繁体   English

然后在base64中解码的编码不输出我的输入数组缓冲区

[英]Encode then decoded in base64 doesn't output my input arraybuffer

Given the two functions below that I use to encode and decode in base64. 鉴于我用于在base64中编码和解码的两个函数。 If I encode then decode, I just do this, then I don't get the same values between my ouput and my input. 如果我编码然后解码,我只是这样做,然后我没有在我的输出和我的输入之间获得相同的值。

Any idea what I'm doing wrong ? 知道我做错了什么吗?

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);

Your line number 6 你的第6行

var ascii = string_base64.charCodeAt(i);

should be 应该

var ascii = binary_string.charCodeAt(i);

Your problem is in _base64ToArrayBuffer 您的问题出在_base64ToArrayBuffer

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

If you think about what the ArrayBuffer you're getting back actually means (in terms of charcodes) it was giving you back your Base64 String . 如果你考虑一下你所获得的ArrayBuffer实际意味着什么(就charcodes而言)它会让你回到你的Base64字符串

Looks like you actually wanted to use 看起来你真的想用

binary_string.charCodeAt(i);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM