类型转换
上一节
下一节
加密函数
Solidity 提供了一些常用的加密函数。本次关卡我们将重点介绍散列函数keccak256。一个散列函数基本上就是把一个字符串转换为一个256位的16进制数字。字符串的一个微小变化会引起散列数据极大变化。
例如:
//6e91ec6b618bb462a4a6ee5aa2cb0e9cf30f7a052bb467b0ba58b8748c00d2e5
keccak256("aaaab");
//b1f078126895a1424524de5321b339ab00408010b7cf0e6ed451514981e58aa9
keccak256("aaaac");现在我们只是用它来造伪随机数,帮助生成随机的DNA。
类型转换
Solidity允许类型之间进行隐式转换和显式转换。
uint32 a = 0x12345678; uint16 b = uint16(a); // b 将变成 0x5678 uint16 a = 0x1234; uint32 b = uint32(a); // b 将变成 0x00001234 assert(a == b);
隐式转换时必须符合一定条件,不能导致信息丢失。例如,uint8 可以转换为 uint16 ,但是 int8 不可以转换为 uint256 ,因为 int8 可以包含 uint256 中不允许的负值。
实战演习
1.完善_generateRandomDna函数 ,第一行代码取 _str 的 keccak256 散列值生成一个伪随机十六进制数,类型转换为 uint, 最后保存在类型为 uint 名为 rand 的变量中。注意这里要有类型转换。
2.完善_generateRandomDna函数,因为我们只想让我们的DNA的长度为19位。所以第二行代码应该 return 上面计算的数值对 dnaModulus 求余数(%)。
3.创建一个 public 函数,命名为 createRandomPet. 它将被传入一个变量 _name (数据类型是 string)。
4.函数的第一行应该调用 _generateRandomDna 函数,传入 _name 参数, 结果保存在一个类型为 uint 的变量里,命名为 randDna。
5.第二行调用 _createPet 函数, 传入参数: _name 和 randDna。


