如何在 Javascript 中将二进制数据读取到字节数组?

IT技术 javascript binary binary-data
2021-02-27 04:36:41

我想在 JavaScript 中读取一个二进制文件,该文件将通过 XMLHttpRequest 获取并能够操作该数据。从我的研究中,我发现了这种将二进制文件数据读入数组的方法

var xhr = new XMLHttpRequest();
xhr.open('GET', '/binary_And_Ascii_File.obj', true);

xhr.responseType = 'arraybuffer';

xhr.onload = function(e) {
  var uInt8Array = new Uint8Array(this.response);
};

如何将此二进制数据数组转换为人类可读的字符串?

2个回答

我相信你会发现这很有帮助:http : //jsdo.it/tsmallfield/uint8array

单击javascript选项卡。将出现将 Uint8Array 转换为字符串的代码。作者展示了2种方法:

  • 第一个是关于创建视图。
  • 第二个偏移字节。

编辑: 报告代码的完整性

var buffer = new ArrayBuffer( res.length ), // res is this.response in your case
    view   = new Uint8Array( buffer ),
    len    = view.length,
    fromCharCode = String.fromCharCode,
    i, s, str;    

/**
 *  1) 8bitの配列に入れて上位ビットけずる
 */
str = "";

for ( i = len; i--; ) {
  view[i] = res[i].charCodeAt(0);
}

for ( i = 0; i < len; ++i ) {
  str += fromCharCode( view[i] );
}    

/**
 *  2) & 0xff で上位ビットけずる
 */
str = "";

for ( i = 0; i < len; ++i ) {
  str += fromCharCode( res[i].charCodeAt(0) & 0xff );
}
function load_binary_resource(url) {
  var byteArray = [];
  var req = new XMLHttpRequest();
  req.open('GET', url, false);
  req.overrideMimeType('text\/plain; charset=x-user-defined');
  req.send(null);
  if (req.status != 200) return byteArray;
  for (var i = 0; i < req.responseText.length; ++i) {
    byteArray.push(req.responseText.charCodeAt(i) & 0xff)
  }
  return byteArray;
}

有关更多详细信息,请参阅https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Sending_and_Receiving_Binary_Data

感谢您的发表。你的代码很好地解决了我的问题。在此之前我试图使用字符串,发现错误。然后我切换到blob。感觉方向不对。这段代码绝对是最好的解决方案。
2021-05-15 04:36:41