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

Solidity 中的`bytes`

在 Solidity 中,bytesbytes32 都是用来保存二进制数据的类型,但它们的长度、使用场景、Gas 成本完全不同。


✅ 一句话区分

类型一句话总结
bytes32定长 32 字节,适合做哈希、地址、标识符等固定长度数据。
bytes动态长度字节数组,适合任意长度数据(如字符串、序列化数据)。

📌 对比表

特性bytes32bytes (bytes memory / bytes calldata)
长度固定 32 字节 (256 位)动态长度,可以是 0~任意长度
存储位置可作为 storage / memory / calldata多为 memorycalldata(不能是 storage 直接存储)
Gas 成本极便宜(固定大小)随长度线性增加(32 字节为一个 slot)
可变性不可变(定长)可变(动态数组)
常见用途哈希值、地址、UUID、枚举键UTF-8 字符串、序列化数据、签名、IPFS 哈希
与字符串互转bytes32 <=> string 需手动转换bytesstring 可强制转换

✅ 代码示例

1. bytes32 用法
bytes32 public constant ROLE_ADMIN = keccak256("ROLE_ADMIN");function getHash(string memory text) public pure returns (bytes32) {return keccak256(abi.encodePacked(text)); // 返回 bytes32
}
2. bytes 用法
function concat(string memory a, string memory b)publicpurereturns (string memory)
{return string(abi.encodePacked(a, b)); // 先转 bytes 再转 string
}
3. 二者互转
// bytes32 -> bytes
bytes32 data = keccak256("hello");
bytes memory b = abi.encodePacked(data);// bytes -> bytes32(必须保证长度 ≤ 32)
bytes memory b = "hello";
bytes32 data;
assembly {data := mload(add(b, 32)) // 手动加载前 32 字节
}

✅ 何时用哪个?

场景推荐类型
哈希值(如 keccak256 结果)bytes32
地址(如 address 转 bytes)bytes32
UTF-8 字符串(不定长)stringbytes
ABI 编码数据bytes memory
签名数据(>= 65 字节)bytes

✅ 一句话总结

  • bytes32:定长、省 gas,存哈希、存标识符
  • bytes:动态长度,存任意二进制或字符串数据
http://www.dtcms.com/a/288521.html

相关文章:

  • [AI风堇]基于ChatGPT3.5+科大讯飞录音转文字API+GPT-SOVITS的模拟情感实时语音对话项目
  • min-max容斥学习笔记
  • 线性回归问题
  • MC0463四大名著-水浒签到
  • 智慧酒店房价牌系统,国际版,海外版 的设计与应用价值研究———仙盟创梦IDE
  • NX二次开发常用函数——从一个坐标系到另一个坐标系的转换(UF_MTX4_csys_to_csys )相同体坐标转化
  • 文献精读:青藏高原东北部青海湖流域沿海拔分布的蒸散量及其主要影响因素
  • 问津集 #1:Rethinking The Compaction Policies in LSM-trees
  • 计算机组成原理20250719——计算机系统概述
  • 创建套接字并bind的详细过程
  • 图片放大镜案例
  • 关于Spring RestTemplate
  • Java多线程进阶
  • 【计算机网络架构】树型架构简介
  • openmv循迹
  • 基于Scrapy-Redis的分布式爬虫系统:工业级实现与深度优化
  • Linux系统日志管理入门:journalctl命令完全指南
  • Python关于numpy的基础知识
  • 物理AI是什么技术?
  • LVS实验步骤解析
  • yolo8实时识别目标(和平精英敌人+骨骼关键点)
  • 云计算与 DevOps(开发与运维)
  • 分立元件线性稳压器12V转5VMultisim仿真
  • [FFmpeg] 输入输出访问 | 管道系统 | AVIOContext 与 URLProtocol | 门面模式
  • LP wizard 软件安装教程
  • 嵌入式学习-PyTorch(8)-day24
  • Mybatis学习之简介(一)
  • 强化学习入门-免模型预测
  • 动态规划——数位DP经典题目
  • 关于饥饿加载(Eager Loading)