第12节:bytes和string

小白入门:https://github.com/dukedaily/solidity-expert ,欢迎star转发,文末加V入群。

职场进阶: https://dukeweb3.com

byteN、bytes、string直接的关系:

image-20220506194856017

bytes:

  • bytes是动态数组,相当于byte数组(如:byte[10])
  • 支持push方法添加
  • 可以与string相互转换
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract  Bytes {
    bytes public name;

    //1. 获取字节长度
    function getLen() public view returns(uint256) {
        return name.length;
    }

    //2. 可以不分空间,直接进行字符串赋值,会自动分配空间
    function setValue(bytes memory input) public {
        name = input;
    }

    //3. 支持push操作,在bytes最后面追加元素
    function pushData() public {
        name.push("h");
    }
}

string:

  • string 动态尺寸的UTF-8编码字符串,是特殊的可变字节数组
  • string 不支持下标索引不支持length、push方法
  • string 可以修改(需通过bytes转换)
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.13;

contract  String {
    string public name = "lily";   

    function setName() public {
        bytes(name)[0] = "L";   
    }

    function getLength() public view returns(uint256) {
        return bytes(name).length;
    }
}