0

镀铬插座阅读对我来说真的很痛苦。

和我之前的许多人一样,我使用以下代码在 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
4

1 回答 1

1

我也发现该代码不起作用,即使它已作为一个或多个 Stack Overflow“解决方案”中的解决方案提供。相反,我使用来自 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);
}
于 2014-05-09T13:42:58.827 回答