我已经定义了一个元组结构:
pub struct ChangedCell(pub bool, pub u32, pub u32);
我的假设
ChangedCell
重9字节(bool
:1字节,u32
:4字节,u32
:4字节)
我做了什么
我将pointer, length
的{{1}}返回到JavaScript:
Vec<ChangedCell>
const arr = new Uint8Array(memory.buffer, pointer, length * 9);
预期行为
function getElements(n,arr) {
const isVal = arr[n * 9 + 0];
const val1 = arr.slice(n * 9 + 1, n * 9 + 5);
const val2 = arr.slice(n * 9 + 5, n * 9 + 9);
return {isVal,val1,val2}
}
成为isVal
[byte]
成为val1
[byte] * 4
成为val2
问题
您如何将此类内容读入JavaScript?
答案 0 :(得分:5)
首先,如果要采用特定的布局,则应将类型标记为repr(C)
:
#[repr(C)]
pub struct ChangedCell(pub bool, pub u32, pub u32);
不带repr(C)
的情况下,您可能会得到与我们相同的布局,但是只有明确编写才能得到保证。
现在可以保证您是C兼容的布局,wasm32中的(请注意填充!)将是:
总大小:12个字节。字节1、2和3正在填充,因此未使用。