【2022 元宇宙基础NFT之Solidity OOP编程第15篇】3分钟了解Solidity Types – 固定大小字节数组(Fixed-size byte arrays)

固定大小字节数组(Fixed-size byte arrays)

固定大小字节数组可以通过 bytes1, bytes2, bytes3, ..., bytes32来进行声明。

  • bytes1只能存储一个字节,也就是二进制8位的内容。
  • bytes2只能存储两个字节,也就是二进制16位的内容。
  • bytes3只能存储三个字节,也就是二进制24位的内容。
  • ......
  • bytes32能存储三十二个字节,也就是二进制32 * 8 = 256 位的内容。
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;

contract C {

    // 0x6c697975656368756e

    // byte public a = 0x6c; // 0110 1100,0.5.0以前的版本支持byte,现在已经不支持了
    bytes1 public b = 0x6c; // 0110 1100
    bytes2 public c = 0x6c69; // 0110 1100 0110 1001
    bytes3 public d = 0x6c6979; // 0110 1100 0110 1001 0111 1001
    bytes4 public e = 0x6c697975; // 0110 1100 0110 1001 0111 1001 0111 0101

    // ...

    bytes8 public f = 0x6c69797565636875; // 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101
    bytes9 public g = 0x6c697975656368756e; // // 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101 0110 1110

}

说明

0x 6c 69 79 75 65 63 68 75 6e是一个十六进制的整数,它的二进制码是0b 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101 0110 1110,在计算机中0b 0110 1100 0110 1001 0111 1001 0111 0101 0110 0101 0110 0011 0110 1000 0111 0101 0110 1110二进制码存储的内容其实就是liyuechun我名字的全拼。我们都知道,在计算机中,所有的内容,不管是图片、文字、视频,任何资料我们都可以转换成二进制码在计算机中进行存储。

在计算机中,一个字母或者一个数字的存储空间为一个字节,也就是8位二进制位。一个汉字两个字节,也就是16位

0x6c697975656368756e中,0x6c是一个字节,因为16进制中,一个数字等价于二进制中的4位,两个数字等价于8位,刚好一个字节,0x6c用二进制来表示是0b 0110 11000x6c对应的内容为l,而0x6c69对应的内容为li,以此内推0x6c697975656368756e对应的内容为liyuechun

PS:

在以前的版本里面bytebytes1等价,只能存储一个字节,当超过它的存储范围时就会报错,如下图所示:

⚠️温馨提示:现在的版本已经不支持byte了,所以以后如果真要使用byte的话,直接使用bytes1即可。

操作运算符

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

成员函数

温馨提示:此处内容已隐藏,您必须消耗1个积分后才能查看。

或者

关注微信公众号: 程序咖元宇宙实验室
回复:程序咖巴士 ,获取验证码。
验证码:
已有 0 用户参与0
0 : 0
+1已打分
电子邮箱
  • 程序咖巴士
联系我们
  • 扫一扫,联系我们