我正在学习 Solidity Assembly,但我对某些事情感到困惑。我正在查看这个名为 Seriality 的库。具体来说,这个函数:https ://github.com/pouladzade/Seriality/blob/master/src/TypesToBytes.sol#L21
function bytes32ToBytes(uint _offst, bytes32 _input, bytes memory _output) internal pure {
assembly {
mstore(add(_output, _offst), _input)
mstore(add(add(_output, _offst),32), add(_input,32))
}
}
该函数 bytes32ToBytes 采用 bytes32 变量并将其存储在动态大小的字节数组中,从传入的偏移量开始。
让我困惑的是它两次使用了 mstore 函数。但是 mstore 函数存储一个字,也就是 32 个字节,对吧?那么,既然输入是 32 字节,为什么它会被调用两次呢?不会两次调用它来存储 2 个字,即 64 字节吗?
谢谢!