在浏览器上解压 C 结构?
Unpack a C struct on browser?
编辑
我找到了这个:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
基本上如果我有这样的东西:
struct someStruct {
unsigned long id;
char username[16];
float amountDue;
};
在客户端我可以做:
var ws = new WebSocket("ws://URI");
ws.binaryType = "arraybuffer";
ws.onmessage = function (e) {
var buffer = e.data;
var data_view = new DataView(buffer);
// ... read the data into the buffer ...
var idView = data_view.getUint32(0);
var usernameView = data_view.getUint32(4);
var amountDueView = data_view.getFloat32(20);
};
问题是我想将它们转换为正常的 Javascript 对象(数字、字符串等)。
原问题
我会通过使用 C 结构打包的 websocket 发送数据,并使用 Javascript 在浏览器上解压。
我知道 node.js 存在模块,但我找不到任何客户端。
好的,
https://www.npmjs.com/package/c-struct 看起来像你想要的。
祝你好运!
好的,经过一些研究,我最终决定这不是一个好主意:
https://justin.harmonize.fm/development/2013/04/28/a-slower-js-msgpack.html
不久:javascript解码速度慢。
使用 JSON 和 Content-Encoding: gzip
可能更简单,如果它不会降低您的网络应用程序的速度。
如果您熟悉 Python struct, then you may like structjs。这是我尝试将 Python 结构移植到 javascript。实际上,它是用于 Node 的,但是客户端端口应该很容易。
您不会遇到该结构的对齐或填充问题(尽管您可以明确指定),但如果这是您的结构,您可能需要指示小端(通过格式字符串中的“<”)味道。你可能会这样做(我没有以任何方式测试这个例子):
let struct = require("./struct") // Node specific, you need to wrap it.
let someStruct = struct('<I16sf') // This is your struct definition
let ws = new WebSocket("ws://URI");
ws.binaryType = "arraybuffer";
ws.onmessage = e => {
// Unpack using the structure definition. Unpack takes an ArrayBuffer.
let [id, username, amountDue] = someStruct.unpack(e.data);
// Use data...
};
编辑
我找到了这个:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Typed_arrays
基本上如果我有这样的东西:
struct someStruct {
unsigned long id;
char username[16];
float amountDue;
};
在客户端我可以做:
var ws = new WebSocket("ws://URI");
ws.binaryType = "arraybuffer";
ws.onmessage = function (e) {
var buffer = e.data;
var data_view = new DataView(buffer);
// ... read the data into the buffer ...
var idView = data_view.getUint32(0);
var usernameView = data_view.getUint32(4);
var amountDueView = data_view.getFloat32(20);
};
问题是我想将它们转换为正常的 Javascript 对象(数字、字符串等)。
原问题
我会通过使用 C 结构打包的 websocket 发送数据,并使用 Javascript 在浏览器上解压。
我知道 node.js 存在模块,但我找不到任何客户端。
好的, https://www.npmjs.com/package/c-struct 看起来像你想要的。 祝你好运!
好的,经过一些研究,我最终决定这不是一个好主意:
https://justin.harmonize.fm/development/2013/04/28/a-slower-js-msgpack.html
不久:javascript解码速度慢。
使用 JSON 和 Content-Encoding: gzip
可能更简单,如果它不会降低您的网络应用程序的速度。
如果您熟悉 Python struct, then you may like structjs。这是我尝试将 Python 结构移植到 javascript。实际上,它是用于 Node 的,但是客户端端口应该很容易。
您不会遇到该结构的对齐或填充问题(尽管您可以明确指定),但如果这是您的结构,您可能需要指示小端(通过格式字符串中的“<”)味道。你可能会这样做(我没有以任何方式测试这个例子):
let struct = require("./struct") // Node specific, you need to wrap it.
let someStruct = struct('<I16sf') // This is your struct definition
let ws = new WebSocket("ws://URI");
ws.binaryType = "arraybuffer";
ws.onmessage = e => {
// Unpack using the structure definition. Unpack takes an ArrayBuffer.
let [id, username, amountDue] = someStruct.unpack(e.data);
// Use data...
};