gpt4 book ai didi

javascript - 从 javascript 类型数组创建一个(好的)结构?

转载 作者:行者123 更新时间:2023-11-28 08:08:30 25 4
gpt4 key购买 nike

我正在考虑 javascript 中的类型化数组;特别是读取二进制文件头。阅读MDN Typed Arrays documentation ,他们愉快地说我们可以表示 C 结构:

struct someStruct {
unsigned long id;
char username[16];
float amountDue;
};

使用 JavaScript:

var buffer = new ArrayBuffer(24);

// ... read the data into the buffer ...

var idView = new Uint32Array(buffer, 0, 1);
var usernameView = new Uint8Array(buffer, 4, 16);
var amountDueView = new Float32Array(buffer, 20, 1);

然后你可以说 amountDueView[0] 但似乎没有意识到将标量视为单元素数组是可怕的事实,并且能够说类似 sizeof(someStruct ) 也很有用。

那么...还有更好的吗? MDN 引用js-ctypes但这不是标准的 JavaScript。

编辑:是的,我了解 javascript 对象。数据建模不是问题;问题在于。优雅地读写二进制数据。

最佳答案

就其值(value)而言,有 jBinary ,它可以让你做这样的事情:

var binary_data = '\x0f\x00\x00\x00Bruce\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xecQXA';

var myTypeset = {
'jBinary.all': 'someStruct',
'jBinary.littleEndian': true,
someStruct: {
id: 'uint32',
username: ['string0', 16],
amountDue: 'float'
}
};

var binary = new jBinary(binary_data, myTypeset);
header = binary.readAll(); // Object {id: 15, username: "Bruce", amountDue: 13.520000457763672}

header.username = "Jim";
binary.writeAll(header);
binary.readAll(); // Object {id: 15, username: "Jim", amountDue: 13.520000457763672}

它没有特别详细的文档记录(非常欢迎像上面这样的示例),但它非常好。

最大的警告是它依赖于 javascript 对象,其属性保持其定义的顺序,实际上就是这种情况,但不是 javascript 规范的一部分。我怀疑这永远不会真正改变,因为它会破坏大量的东西,但仍然如此。

关于javascript - 从 javascript 类型数组创建一个(好的)结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24543987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com