(solidity)字符串(String literal)

字符串字面量


字符串字面量是指由单引号,或双引号引起来的字符串。字符串并不像C语言,包含结束符,foo这个字符串大小仅为三个字节。

定长字节数组


正如整数一样,字符串的长度类型可以是变长的。特殊之处在于,可以隐式的转换为byte1····byte32

eg:

pragma solidity ^0.4.17;

contract StringTest {
    
    function test() public pure returns (bytes3){
      bytes3 a = "123";
      bytes3 b = "1234";
       //Error: Type literal_string "1234" is not implicitly convertible to expected type bytes3.

      return a;
  }
}
  • 上述的字符串字面量,会隐式转换为bytes3。但这样不是理解为bytes3的字面量方式一个意思。

转义字符


字符串字面量支持转义字符,比如\n\xNN\uNNN。其中、xNN表式16进制值,最终录入合适的字节。而、uNNN表示Unicode码的值,最终会转换为UTF8的序列。

十六进制字面量


十六进制字面量,以关键字hex打头,后面紧跟用单或双引号包裹的字符串。如hex"001122ff"。在内部会表示为二进制流。

eg:

pragma solidity ^0.4.17;

contract StringTest {

    function test() public pure returns (string){
      var a = hex"001122FF";

      //var b = hex"A";
      //Expected primary expression
      return a;
  }
}

由于一个字节是8位,所以一个hex是由俩个[0-9a-z]字符组成的。所以var b = hex"A";不是成双的字符串是会报错的。

转换


十六进制的字面量与字符串可以进行同样的类似操作:

pragma solidity ^0.4.17;

contract StringTest {

    function test() public pure returns (string){
      var a = hex"001122FF";

      //var b = hex"A";
      //Expected primary expression
      return a;
  }
  function test1() public pure returns (bytes4, bytes1, bytes1, bytes1, bytes1){
      bytes4 a = hex"001122FF";

      return (a, a[0], a[1], a[2], a[3]);
  }
}

可以发现,它可以隐式的转为bytes,上述代码的执行结果如下:

Result: "0x001122ff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000002200000000000000000000000000000000000000000000000000000000000000ff00000000000000000000000000000000000000000000000000000000000000"
Transaction cost: 21857 gas. 
Execution cost: 585 gas.
Decoded: 
bytes4: 0x001122ff
bytes1: 0x00
bytes1: 0x11
bytes1: 0x22
bytes1: 0xff
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,208评论 0 13
  • 字符串和字符 [TOC] 字符串是例如 "hello, world" , "albatross" 这样的有序的 C...
    伍哥___阅读 1,119评论 0 0
  • 一、Java 简介 Java是由Sun Microsystems公司于1995年5月推出的Java面向对象程序设计...
    子非鱼_t_阅读 4,295评论 1 44
  • 以为一辈子会在一起的人,没想到不如一瓶还剩一半的润肤乳陪我更长。人生真是神奇啊~
    炸裂火柴阅读 163评论 0 0
  • 今日数学~2小时 专业课~2小时国金一 英语~70分钟单词 政治~1小时 共~5小时 报名完成。费了很大力气,但至...
    童雪阅读 237评论 0 0