当前位置: 首页 > news >正文

【区块链安全 | 第二十二篇】类型之字面量和基础类型之间的转换

文章目录

  • 字面量和基础类型之间的转换
    • 整数类型
    • 固定大小字节数组
    • 地址类型

在这里插入图片描述

字面量和基础类型之间的转换

整数类型

十进制和十六进制数字面量可以隐式转换为任何足够大的整数类型,以便表示它们而不会发生截断:

uint8 a = 12; // 合法
uint32 b = 1234; // 合法
uint16 c = 0x123456; // 不合法,因为它会被截断为 0x3456

注意:在 0.8.0 版本之前,所有的十进制或十六进制数字面量都可以显式转换为整数类型。从 0.8.0 开始,显式转换的规则与隐式转换一样严格,即只有当字面量的值适合目标类型的范围时,才允许转换。

固定大小字节数组

十进制数字面量不能隐式转换为固定大小字节数组。十六进制数字面量可以隐式转换,但前提是十六进制数字的数量恰好符合字节类型的大小。作为例外,值为零的十进制和十六进制字面量可以转换为任何固定大小的字节类型:

bytes2 a = 54321; // 不允许
bytes2 b = 0x12; // 不允许
bytes2 c = 0x123; // 不允许
bytes2 d = 0x1234; // 合法
bytes2 e = 0x0012; // 合法
bytes4 f = 0; // 合法
bytes4 g = 0x0; // 合法

字符串字面量和十六进制字符串字面量可以隐式转换为固定大小字节数组,如果它们的字符数不超过字节类型的大小:

bytes2 a = hex"1234"; // 合法
bytes2 b = "xy"; // 合法
bytes2 c = hex"12"; // 合法
bytes2 e = "x"; // 合法
bytes2 f = "xyz"; // 不允许

地址类型

如在地址字面量中所述,符合大小且通过校验和测试的十六进制字面量属于地址类型。其他任何字面量都不能隐式转换为地址类型。

显式转换为地址类型只允许从 bytes20uint160 类型进行。

此外,可以通过 payable(a) 将地址 a 显式转换为可支付地址(address payable)。

注意:在 0.8.0 版本之前,可以将任何整数类型(无论大小或符号)显式转换为地址或可支付地址。从 0.8.0 开始,仅允许从 uint160 类型转换。

相关文章:

  • Springboot 中使用 List<Integer> 与 JSONArray 处理 JSON 数组的性能与实践
  • ZGC 参数优化与 GC 触发机制解析分享
  • 《混沌钟的RISC-V指令集重构》
  • 盛铂国产SCP4000 射频微波功率计与 SPP5000脉冲峰值功率计:高性价比,探头式功率计功率测量
  • Open GL ES ->GLSurfaceView在正交投影下的图片旋转、缩放、位移
  • 【go】异常处理panic和recover
  • 【Android开发基础】手机传感器信息的获取
  • Postman 变量全解析:实现数据传递和共享,提升 API 测试效率
  • 【1】搭建k8s集群系列(二进制部署)之系统初始化
  • 01 - spring security自定义登录页面
  • 51c嵌入式~单片机~合集7~※
  • ffmpeg滤镜使用
  • 从架构角度谈谈云原生架构
  • 笔记:代码随想录算法训练营day63:prim算法精讲、kruskal算法精讲
  • HTTP 请求方法
  • CentOS 7 如何挂载ntfs的移动硬盘
  • 【Verilog】实验十 带倒计时交通灯控制电路设计
  • 本地部署大模型-web界面(ollama + open-webui)
  • 关于终端安全管理系统的超全解析
  • deepseek的使用技巧与组合
  • 国内课题组建设常用网站/线下引流推广方法
  • 宁德北京网站建设/2345浏览器官网
  • b2c商城物流模式的比较分析/天津百度快速优化排名
  • 手机app开发网站建设/十大最靠谱it培训机构
  • 佳木斯 网站建设/谷歌海外推广
  • 南宁学网站建设/百度网站收录链接提交