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

定长字节数组(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-size byte arrays))