无法解析ArrayBuffer

时间:2014-05-09 08:00:04

标签: sockets google-chrome-app arraybuffer

chrome socket读书对我来说真的很痛苦。

在我之前,我使用以下代码在ArrayBuffer和字符串之间来回转换:

function ab2str(buf) {
  return String.fromCharCode.apply(null, new Uint16Array(buf));
}

function str2ab(str) {
  var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
  var bufView = new Uint16Array(buf);
  for (var i=0, strLen=str.length; i<strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  return buf;
}

不幸的是,我从套接字收到的东西似乎是不可解决的。

假设数据报是:

01,33,2.58,1.00

以下代码失败:

function message(msg, rinfo) {

    var string = ab2str(msg);
    console.log(string);
    var data = string.split(",");
    for (i = 0; i < data.length; i++) {
       data[i] = parseFloat(data[i]);
       console.log(data[i]);
    }
}

控制台输出:

01,33,2.58,1.00
0
NaN
NaN
NaN

1 个答案:

答案 0 :(得分:1)

我也发现该代码不起作用,即使它已作为一个或多个Stack Overflow&#34;解决方案中的解决方案提供。&#34;相反,我使用的是从Google Chrome App tcpserver示例中获取的代码:

/**
* Converts an array buffer to a string
*
* @private
* @param {ArrayBuffer} buf The buffer to convert
* @param {Function} callback The function to call when conversion is complete
*/
function _arrayBufferToString(buf, callback) {
    var bb = new Blob([new Uint8Array(buf)]);
    var f = new FileReader();
    f.onload = function(e) {
        callback(e.target.result);
    };
    f.readAsText(bb);
}

/**
* Converts a string to an array buffer
*
* @private
* @param {String} str The string to convert
* @param {Function} callback The function to call when conversion is complete
*/
function _stringToArrayBuffer(str, callback) {
    var bb = new Blob([str]);
    var f = new FileReader();
    f.onload = function(e) {
        callback(e.target.result);
    };
    f.readAsArrayBuffer(bb);
}