gpt4 book ai didi

rust - 如何从Wasm内存缓冲区读取元组结构?

转载 作者:行者123 更新时间:2023-12-03 11:40:44 24 4
gpt4 key购买 nike

我定义了一个元组结构:

pub struct ChangedCell(pub bool, pub u32, pub u32);
我的假设 ChangedCell重9个字节( bool:1个字节, u32:4个字节, u32:4个字节)
我做了什么
我将 pointer, lengthVec<ChangedCell>返回给JavaScript:
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}
}
预期的行为
  • isValvalid [byte]
  • val1valid [byte] * 4
  • val2valid [byte] * 4

  • 问题 I am getting Garbage values!您如何将此类内容读入JavaScript?

    最佳答案

    首先,如果要采用特定的布局,则应将类型标记为repr(C):

    #[repr(C)]
    pub struct ChangedCell(pub bool, pub u32, pub u32);
    没有 repr(C)的情况下,您可能会得到与我们相同的布局,但是只有明确编写时才能得到保证。
    现在,您可以保证使用C兼容的布局,在wasm32中(请注意填充!)将是:
  • bool:偏移量 0 ,1个字节,0x00或0x01。
  • u32:偏移量 4 ,4个字节,
  • u32:偏移量 8 ,4个字节,

  • 总大小:12个字节。字节1、2和3正在填充,因此未使用。

    关于rust - 如何从Wasm内存缓冲区读取元组结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63264564/

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