- Solidity 教程
- Solidity - 主页
- Solidity - 概述
- Solidity - 环境设置
- Solidity - 基本语法
- Solidity - 首次应用
- Solidity - 评论
- 坚固性 - 类型
- Solidity - 变量
- Solidity - 可变范围
- Solidity - 运算符
- 坚固性 - 循环
- Solidity - 决策
- 坚固性 - 弦乐
- Solidity - 数组
- Solidity - 枚举
- Solidity - 结构
- Solidity - 映射
- 坚固性 - 转换
- Solidity - 以太币单位
- Solidity - 特殊变量
- Solidity - 风格指南
- 实体函数
- Solidity - 函数
- Solidity - 函数修饰符
- Solidity - 查看函数
- Solidity - 纯函数
- Solidity - 后备函数
- 函数重载
- 数学函数
- 加密函数
- Solidity 常见模式
- Solidity - 提款模式
- Solidity - 限制访问
- 坚固进阶
- Solidity - 合约
- 坚固性——继承
- Solidity - 构造函数
- Solidity - 抽象合约
- Solidity - 接口
- Solidity - 库
- 坚固性 - 装配
- Solidity - 活动
- Solidity - 错误处理
- Solidity 有用资源
- Solidity - 快速指南
- Solidity - 有用的资源
- 坚固性 - 讨论
坚固性 - 转换
Solidity 允许隐式和显式转换。Solidity 编译器允许两种数据类型之间的隐式转换,前提是不可能进行隐式转换并且不会丢失信息。例如,uint8 可转换为 uint16,但 int8 可转换为 uint256,因为 int8 可以包含 uint256 不允许的负值。
显式转换
我们可以使用构造函数语法显式地将一种数据类型转换为另一种数据类型。
int8 y = -3; uint x = uint(y); //Now x = 0xfffff..fd == two complement representation of -3 in 256 bit format.
转换为较小的类型需要更高的位。
uint32 a = 0x12345678; uint16 b = uint16(a); // b = 0x5678
转换为更高类型会在左侧添加填充位。
uint16 a = 0x1234; uint32 b = uint32(a); // b = 0x00001234
转换为更小的字节需要更高阶的数据。
bytes2 a = 0x1234; bytes1 b = bytes1(a); // b = 0x12
转换为较大字节时,会在右侧添加填充位。
bytes2 a = 0x1234; bytes4 b = bytes4(a); // b = 0x12340000
仅当固定大小字节和 int 大小相同时,才可以在固定大小字节和 int 之间进行转换。
bytes2 a = 0x1234; uint32 b = uint16(a); // b = 0x00001234 uint32 c = uint32(bytes4(a)); // c = 0x12340000 uint8 d = uint8(uint16(a)); // d = 0x34 uint8 e = uint8(bytes1(a)); // e = 0x12
如果不需要截断,则可以将十六进制数分配给任何整数类型。
uint8 a = 12; // no error uint32 b = 1234; // no error uint16 c = 0x123456; // error, as truncation required to 0x3456