0

音楽ファイルのバイナリコードを表示したい。しかし、どういうわけか、以下のコードは機能していないようです。助言がありますか??

function binary() {
    var xmlhttp;
    if (window.XMLHttpRequest) {  // code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp = new XMLHttpRequest();
    }
    else {  // code for IE6, IE5
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.open("GET","1.wav",true);
    xmlhttp.overrideMimeType("text/plain; charset=x-user-defined");
    xmlhttp.onreadystatechange = function(buffer) {
        var binaryCode = "";
        if (xmlhttp.readyState==4 && xmlhttp.status==200) {
            var binStr = this.responseText;
            for (var i=0; i<binStr.length; i++) {
                var byte = binStr.charCodeAt(i) & 0xff;  // get byte at i
                binaryCode += byte;
            }   
        }
        document.getElementById("result").innerHTML = binaryCode; // should display binary code
    };
    xmlhttp.send();
}
4

2 に答える 2

0

すべてのバイト値が文字列で表現できるわけではなく、表示されないか、文字列が短く切り捨てられることはありません。

XMLHttpResponse.ResponseText/ResponseXML は、http 応答コンテンツを文字列として返します。たとえば、バイト値が 0 の場合、文字列は終了します。

サーバーにバイトの Base64 表現を返させ、クライアント側でバイト値にデコードします。

于 2012-10-10T10:38:49.090 に答える
0

あなたのコードは、Chrome ブラウザで正常に動作しているようです。あなたが実験している問題は正確には何ですか?

次のようにして、バイナリを 16 進形式で表示することができます。

binaryCode += '0x' + byte.toString(16) + ' '

編集: この jsfiddle は私のクロムで動作します: http://jsfiddle.net/e6Kfk/

ただし、特にieを処理したい場合は、この方法がクロスブラウザであるとは思いません(ただし、テストしていません)

于 2012-10-10T11:03:55.250 に答える