【转载】solidity智能合约[11]-字符串


#1

字符串

string 类型存储字符串, 在solidity中使用了UTF-8格式来存储字符串。

string public name="jonson";//6a6f6e736f6e
string public name1="!@#$%^&*())*";
string public name2="我爱你";

字符串不能直接的获取长度和内容

下面是错误的方式

// function getLength() returns(uint){
 //     name.length;
 // }

 // function getName() returns(bytes1) {
 //     return name[0];
 // }

获取字符串长度和内容和的正确方式

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

function getName() public view returns(bytes1){
return bytes(name)[1];
}

修改字符串中的内容

function changeName() public{
// bytes(name)[0]=0x55;
    bytes(name)[0]='P';
}

证明中文占了3个字节

   string public name2="我爱你";
   function getLength2() public view returns(uint){
    return bytes(name2).length;
}

字符串转动态字节数组

function  getBytes() public view returns(bytes){

    return bytes(name);
}

完整代码测试

pragma solidity ^0.4.23;

contract StringTest{

    string public name="jonson";//6a6f6e736f6e
    string public name1="!@#$%^&*())*";
    string public name2="我爱你";

    // function getLength() returns(uint){
    //     name.length;
    // }
      function getLength() public view returns(uint){
        return bytes(name).length;
    }
    // function getName() returns(bytes1) {
    //     return name[0];
    // }
         function getName() public view returns(bytes1){
        return bytes(name)[1];
    }

    function changeName() public{
    // bytes(name)[0]=0x55;
        bytes(name)[0]='P';
    }

    function  getBytes() public view returns(bytes){

        return bytes(name);
    }

         function getLength1() public view returns(uint){
        return bytes(name1).length;
    }
    function  getBytes1() public view returns(bytes){

        return bytes(name1);
    }

    function getLength2() public view returns(uint){
        return bytes(name2).length;
    }
    function  getBytes2() public view returns(bytes){

        return bytes(name2);
    }
}

总结

1、字符串是特殊的动态长度字节数组
2、字符串不能够字节的修改长度和内容,需要转换为bytes动态字节数组
3、字符串在solidity中使用了UTF8格式来存储,所以汉字占了3个字节,英文和特殊字符占了一个字节

  • 本文链接: <https ://dreamerjonson.com/2018/11/15/solidity-11/>