0

以下の 2 つの関数を使用して、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);
4

2 に答える 2

1

あなたの問題は_base64ToArrayBuffer

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

返されるArrayBufferが実際に何を意味するかを考えると(文字コードに関して)、それはBase64 Stringを返していました。

実際に使いたかったようです

binary_string.charCodeAt(i);
于 2013-10-18T12:20:27.650 に答える
1

あなたの回線番号 6

var ascii = string_base64.charCodeAt(i);

する必要があります

var ascii = binary_string.charCodeAt(i);
于 2013-10-18T12:20:16.263 に答える