solidity智能合约[11]-字符串-创新互联

字符串

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

寻甸网站制作公司哪家好,找创新互联!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联
1
2
3
string public name="jonson";//6a6f6e736f6e
string public name1="!@#$%^&*())*";
string public name2="我爱你";

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

下面是错误的方式

1
2
3
4
5
6
7
// function getLength() returns(uint){
//   name.length;
// }

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

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

1
2
3
4
5
6
7
 function getLength() public view returns(uint){
  return bytes(name).length;
}

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

修改字符串中的内容

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

证明中文占了3个字节

1
2
3
4
  string public name2="我爱你";
 function getLength3() public view returns(uint){
  return bytes(name2).length;
}

字符串转动态字节数组

1
2
3
4
function  getBytes() public view returns(bytes){

  return bytes(name);
}

完整代码测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
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 getLength2() public view returns(uint){
    return bytes(name1).length;
  }
  function  getBytes1() public view returns(bytes){

    return bytes(name1);
  }

  function getLength3() 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/

  • 版权声明:本博客所有文章除特别声明外,均采用 CC BY 4.0 CN协议 许可协议。转载请注明出处!

solidity智能合约[11]-字符串

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


文章题目:solidity智能合约[11]-字符串-创新互联
网址分享:http://azwzsj.com/article/decegj.html