代码之家  ›  专栏  ›  技术社区  ›  Stephane Rolland

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

  •  0
  • Stephane Rolland  · 技术社区  · 13 年前

    给定下面两个函数,我使用它们在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);
    
    2 回复  |  直到 13 年前
        1
  •  1
  •   Paul S.    13 年前

    你的问题在 _base64ToArrayBuffer

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

    如果你想一想 阵列缓冲区 你回来了实际上意味着(就charcode而言)它把你的 Base64字符串 .

    看起来你真的想用

    binary_string.charCodeAt(i);
    
        2
  •  1
  •   closure    13 年前

    您的电话号码6

    var ascii = string_base64.charCodeAt(i);
    

    应该是

    var ascii = binary_string.charCodeAt(i);
    
    推荐文章