• 微课视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
微课江湖
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 微课视频
  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链
您的位置:首页 > 网络安全 >区块链 > Solidity Types-动态大小字节数组

Solidity Types-动态大小字节数组

作者:孔壹学院 字体:[增加 减小] 来源:互联网 时间:2018-11-03

孔壹学院向大家分享了Solidity Types-动态大小字节数组,其中包含动态大小字节数组等知识点,遇到此问题的同学们可以参考下

孔壹学院:国内区块链职业教育领先品牌

作者:黎跃春,区块链、高可用架构工程师 , 博客:http://liyuechun.org


一、Dynamically-sized byte arra

string 是一个动态尺寸的UTF-8编码字符串,它其实是一个特殊的可变字节数组,string是引用类型,而非值类型。

  • byte 动态字节数组,引用类型。

根据经验,在我们不确定字节数据大小的情况下,我们可以使用string或者bytes,而如果我们清楚的知道或者能够将字节书控制在bytes1~ bytes32,那么我们就使用bytes1 ~ bytes32,这样的话能够降低存储成本。


二、常规字符串 sting 转换为 bytes

string字符串中没有提供length方法获取字符串长度,也没有提供方法修改某个索引的字节码,不过我们可以将string转换为bytes,再调用length方法获取字节长度,当然可以修改某个索引的字节码。

1、源码

pragma solidity ^0.4.4;contract C { bytes9 public g = 0x6c697975656368756e; string public name = "liyuechun"; function gByteLength() constant returns (uint) { return g.length; } function nameBytes() constant returns (bytes) { return bytes(name); } function nameLength() constant returns (uint) { return bytes(name).length; } function setNameFirstByteForL(bytes1 z) { // 0x4c => "L" bytes(name)[0] = z; }}

2、效果图

3、说明

function nameBytes() constant returns (bytes) { return bytes(name);}

nameBytes这个函数的功能是将字符串name转换为bytes,并且返回的结果为0x6c697975656368756e。

0x6c697975656368756e一共为9字节,也就是一个英文字母对应一个字节。

function nameLength() constant returns (uint) { return bytes(name).length;}

我们之前讲过,string字符串它并不提供length方法帮助我们返回字符串的长度,所以在nameLength方法中,我们将name

转换为bytes,然后再调用length方法来返回字节数,因为一个字节对应一个英文字母,所以返回的字节数量刚好等于字符串的长度。

function setNameFirstByteForL(bytes1 z) { // 0x4c => "L" bytes(name)[0] = z;}

如果我们想将name字符串中的某个字母进行修改,那么我们直接通过x[k] = z的形式进行修改即可。x是bytes类型的字节数组,k是索引,z是byte1类型的变量值。setNameFirstByteForL方法中,我就将liyuechun中的首字母修改成L,我传入的z的值为0x4c,即大写的L。


三、汉字字符串或特殊字符的字符串转换为bytes

1、特殊字符

pragma solidity ^0.4.4;contract C { string public name = "a!+&520"; function nameBytes() constant returns (bytes) { return bytes(name); } function nameLength() constant returns (uint) { return bytes(name).length; }}

在这个案例中,我们声明了一个name字符串,值为a!+&520,根据nameBytes和nameLength返回的结果中,我们不难看出,不管是字母、数字还是特殊符号,每个字母对应一个byte(字节)。

2、中文字符串

pragma solidity ^0.4.4;contract C { string public name = "黎跃春"; function nameBytes() constant returns (bytes) { return bytes(name); } function nameLength() constant returns (uint) { return bytes(name).length; }}

在上面的代码中,我们不难看出,黎跃春转换为bytes以后的内容为0xe9bb8ee8b783e698a5,一共9个字节。也就是一个汉字需要通过3个字节来进行存储。那么问题来了,以后我们取字符串时,字符串中最好不要带汉字,否则计算字符串长度时还得特殊处理。


四、创建bytes字节数组

pragma solidity ^0.4.4;contract C { bytes public name = new bytes(1); function setNameLength(uint 
  


 
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2018-11-03区块链技术相关的论文、文档、学习资料
  • 2018-11-03比特币、莱特币考虑交易成本的三角套利
  • 2018-11-03基于哈希函数的签名
  • 2018-11-03如何在IoT Chain(万物链)部署智能合约
  • 2018-07-07区块链记账原理
  • 2018-11-03IOTA的通证价值基础与激励价值的关系
  • 2018-11-03在Python实现梯度下降优化算法
  • 2018-11-03什么是去中心化应用(DApp)
  • 2018-11-03瑞波币Ripple(XRP)最新详细教程
  • 2018-11-03阿瓦隆矿机简介及最新产品固件

文章分类

  • 安全教程
  • 安全设置
  • 杀毒防毒
  • 病毒查杀
  • 脚本攻防
  • 入侵防御
  • 工具使用
  • 业界动态
  • Exploit
  • 漏洞分析
  • 加密解密
  • 手机安全
  • 区块链

最近更新的内容

    • RSI指标策略在数字资产量化交易中的应用
    • 区块链技术中的机器学习
    • 雷电网络如何与以太坊融合?
    • 你的第一个Truffle分布式app (1)
    • 稳定币的不稳定性
    • 如何实现可升级的智能合约?
    • BLOCKBENCH:一种评估私有链的框架(上)
    • 区块链基础知识——什么是挖矿(ASIC挖矿)
    • 标准化:区块链产业化发展必经之路
    • DAO是什么及其工作原理

关于我们 - 联系我们 - 免责声明 - 网站地图

©2015-2018 All Rights Reserved. 微课江湖 版权所有