定长字节数组(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
读取字节数组的字节数。
网友评论