2012-10-10 4 views
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(); 
} 

답변

0

모든 바이트 값이 문자열로 표현 될 수있는 것은 아니며, 문자열이 짧게 잘리는 것은 아닙니다.

XMLHttpResponse.ResponseText/ResponseXML은 http 응답 내용을 문자열로 반환합니다. 예를 들어 0의 모든 바이트 값은 문자열을 종료합니다.

서버가 바이트의 Base64 표현을 반환하고 클라이언트 측에서 바이트 값으로 디코딩하도록합니다.

0

크롬 브라우저에서 코드가 제대로 작동하는 것 같습니다. 정확히 실험하고있는 문제는 무엇입니까?

당신은 같은 일을하여 16 진수 형식의 바이너리를 표시 할 수 있습니다

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

편집 :이 jsfiddle 내 크롬에서 작동 그러나 http://jsfiddle.net/e6Kfk/

, 난 생각하지 않습니다 이 방법은 특히 크로스 (crossbrowser)입니다. ie (즉 테스트하지 않았습니다.)

+0

내 크롬 브라우저에서 제대로 작동하지 않는 것 같습니다. 아무 것도 표시되지 않습니다. 나는 그 문제가 음악 파일인지 여부를 모른다. –

+0

내 견해로는 말하기가 어렵지만 실제로 if (..status == 200)에 들어가고 데이터 길이가 올바른지 확인하는 것이 가장 좋습니다. 크롬 디버거와 console.log를 사용하여 도와주세요. – Louis