《周易·系辞下》有言“穷则变,变则通,通则久”。在Solidity中你会发现固定字节数组之间是可以相互转换的,而当你将固定字节数组转成动态字节数组时你会发现普通的直接转换是行不通的。这时你可能需要转换思维,当你第一次遇到这样的问题时,如果直接方法不行,你能继续追问间接的方法是什么?而没有放弃时。尽管你一时还找不到答案与方法,但你的思维里已存在“变通”的影子,这思维对后续的代码逻辑编写及其重要。
实验目的
1. 明白固定字节数组是否能直接转换为动态字节数组。
2. 了解固定字节数组转为动态字节数组的注意点。
实验要求
1. 查看示例1的代码,判断directTodynamicBytes函数是否能编译成功,即固定字节数组是否能直接转换为动态字节数组?将答案填写于后面的注释括号里。然后编译,检查是否能直接转换。
2. 查看示例2的代码。这是用遍历的方法将固定字节数组bytes12 name转换成动态字节数组bytes newName,但编译时会报错。请根据报错的信息完善相应位置的代码,这几处是编写时要注意的,仔细分析执行过程。
以下是本次实验所使用到的测试代码,请使用remix编辑器完成该实验
示列1:
// SPDX-License-Identifier: GPL-3.0
pragma solidity^0.8.0;
contract fixDynamic{
bytes12 name = 0xe88081e5ad90e5a5bde59180;
//判断固定字节数组是否能直接转换为动态字节数组? (1)
function directTodynamicBytes() public view returns(bytes memory){
return bytes(name);
}
}
示例2:
// SPDX-License-Identifier: GPL-3.0
pragma solidity^0.8.0;
contract fixDynamic{
bytes12 name = 0xe88081e5ad90e5a5bde59180;
function fixBytesTodynamicBytes() public view returns(bytes memory){
bytes newName = new bytes( );
for(uint i = 0;i<name.length;i++){
newName[i] = name[i];
}
return newName;
}
}
下面是本次实验配套的教学视频:
