从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
答案 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);
}