美文网首页
以太坊(十一)Solidity数据类型-定长字节数组(Fixed

以太坊(十一)Solidity数据类型-定长字节数组(Fixed

作者: duanyu | 来源:发表于2018-03-18 21:51 被阅读70次

    定长字节数组(Fixed-size byte arrays)

    定长字节数组可以通过 bytes1, bytes2, bytes3, …, bytes32来进行声明。
    byte 默认就是 `bytes1

    • bytes1只能存储一个字节,也就是二进制8位的内容。
    • bytes2只能存储两个字节,也就是二进制16位的内容。
    • bytes3只能存储三个字节,也就是二进制24位的内容。
    • ……
    • bytes32能存储三十二个字节,也就是二进制32 * 8 = 256 位的内容。

    使用指定长度的命名方式 bytes,不是 byte,多一个s,不然编译报错Error: Identifier not found or not unique

    操作运算符

    • 比较运算符:<=, <, ==, !=, >=, >
    • 位操作符:&, |, ^(异或), ~ (取反), << (左移), >> (右移)
    • 索引访问:如果x是一个bytesI,那么可以通过x[k](0 < k < I)获取对应索引的字节,PS:x[k]是只读,不可写。

    成员函数

    • .length 返回字节的个数。(只读)
    pragma solidity ^0.4.0;
    
    contract C {
    
        bytes3 public name = "wsj";
    
        function gByteLength() constant returns (uint) {
    
            return name.length;
        }
    
    }
    
    

    不可变深度解析

    长度不可变

    pragma solidity ^0.4.0;
    
    contract C {
        
        
        bytes3  name = "wsj";
        
        function setNameLength(uint length) {
        
            //编译错误
            name.length = length;
        }
        
    }
    
    

    内部字节不可修改

    pragma solidity ^0.4.0;
    
    contract C {
        
        bytes3  name = "wsj"
        
        function setNameFirstByte(byte b) {
             // 编译错误
            name[0] = b;
        }
        
    }
    
    

    总结

    bytesI(1 <= I <= 32)可以声明固定字节大小的字节数组变量,一旦声明,内部的字节和字节数组长度不可修改,当然可以通过索引读取(只读)对应索引的字节,或者通过length读取字节数组的字节数。

    相关文章

      网友评论

          本文标题:以太坊(十一)Solidity数据类型-定长字节数组(Fixed

          本文链接:https://www.haomeiwen.com/subject/noeyqftx.html