牢固地处理字符串

这是我们将直接从地道的博客系列中的第一个博客,深入探讨了当前我们正在与《议定书》一起做的一些事情的技术细节。

今天的文章来自Alex Pinto,这是Aventus区块链工程团队的最新成员,他在过去的几周中一直在努力加快使用Solidity的速度,并将带给我们一些语言的挑战和特殊性。

今天,我为您提供有关使用Solidity语言进行以太坊区块链编程的文章。 我不会遵循任何计划:我的目标只是写关于学习这种语言的障碍以及我在日常工作中遇到的实际困难。

我想自由地写任何主题,而不必先介绍初级材料,就像我在写教科书时要做的那样。 如果您发现我在谈论我以前没有解释过的事情,那是设计使然。 在下面给我留言,我将在以后的文章中再次与他们联系。

基本访问

今天,我想谈谈Solidity中的字符串。 首先,坚固性在语法上类似于Javascript和其他类似C的语言。 因此,以几种常见和广泛使用的语言之一为基础的新手很容易快速了解Solidity程序的功能。 然而,在隐藏了无法预见的困难的谚语细节中,团结是强大的。 类型和相关类型就是这种情况。

这两种都是动态数组类型,这意味着它们可以存储任意大小的数据。 类型的变量的每个元素是,勿庸置疑,一个字节。 类型变量的每个元素都是的一个字符。 到目前为止还算不错,但最初的外观令人迷惑。 来自其他语言的人可能希望类型提供一些有用的功能,例如:

  • 确定字符串的长度
  • 在字符串的给定位置读取或更改字符
  • 连接两个字符串
  • 提取字符串的一部分

坏消息:Solidity的不能执行任何操作! 如果需要以上任何一项,则必须手动进行。

因此,让我们探索其中的一些困难,看看我们可以采取哪些措施。 我打开Remix并在名为string.sol的新文件中键入以下代码。

牢固地处理字符串

在当前情况下,Remix将报告两种相同类型的警告:我编写的方法可能会产生高至无限的汽油成本。 我将在这篇文章中忽略它。

上述合同非常少。 它定义了类型为的状态变量 ,设置它的方法和获取它的方法。 让我们测试一下。

在“ 运行”选项卡中,单击“ 部署” ,如果合同没有问题,该按钮下方将出现一个新区域,其中包含合同所在的地址和可用功能。

牢固地处理字符串

在这一点上,我只想按下右侧的getStore按钮,并注意其下方如何显示结果:

牢固地处理字符串

在解码的输出中。 一切都很好。

现在,我在setStore右侧的文本框中键入“ 0123456789”,然后单击该按钮。 然后,我再次调用getStore并收到该字符串。 竖起大拇指,我们可以使用字符串进行基本的存储/检索!

现在让我们去做更多有趣的事情。

创建新字符串:数据位置

到目前为止,我已经访问了文字字符串,并且我们看到了如何通过分配它来对其进行更改。 但这只是处理字符串的一种非常粗略的方法。 让我们逐字符创建一个字符串。 这将向我们介绍Solidity编程的一个特殊之处:数据位置。

我创建了一个新方法,该方法仅返回带有三个特定字符的新字符串:“ Abc”。

牢固地处理字符串

如果包含任何用多于1个字节的字符来表示UTF的字符,则会出现此问题。 在这种情况下,该函数将返回输入字符串的字节表示形式的长度,并且该长度将大于字符数。

当尝试寻址字符串的特定字符时,这也会产生影响,因为我们无法预测该字符的字节将位于哪个位置。 我们必须解析字符串以线性标识任何多字节字符,否则请确保将输入限制为固定长度的字符。 例如,如果我们仅使用ASCII字符串,则将是安全的。

回到我们之前的功能,这个工作:

牢固地处理字符串

这将为输入“ Abcdef”返回“ AbXdef”,但返回“Xbán?!”。 输入“€bán?!”

结论

关于这个话题,还有很多事情可以说,但是这篇文章已经足够长了,所以我会总结一下。 有关类型的关键概念是这是一个UTF-8字符数组,可以无缝转换为 。 这是处理字符串的唯一方法。 但是必须注意,UTF-8字符与字节不完全匹配。 在任一方向上的转换都是准确的,但每个字节索引和相应的字符串索引之间没有直接关系。
对于大多数事情而言,将字符串直接表示为类型 (避免转换)可能会有一个优势,并且在使用以UTF编码超过一个字节的字符时要格外小心。

现在就足够了。 另一天见,在此编码冒险中有更多步骤。

关于作者

牢固地处理字符串

Aventus是基于区块链的协议,可为现场票务行业提供增强的信任度,安全性和控制力,实际上消除了伪造票证和不公平的交易。 组织者可以创建,管理和促销其事件和相关票证,显着降低平台成本,并显着影响二级市场。

有关更多信息,请访问 Aventus.io 并在 Twitter, Telegram Reddit 上关注Aventus

From: https://hackernoon.com/working-with-strings-in-solidity-c4ff6d5f8008

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据库组成32046 人正在系统学习中 相关资源:软件测试管理中软件项目需求分析总结_需求分析小结-其它代码类…

来源:dfsgwe1231

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2018年6月15日
下一篇 2018年6月15日

相关推荐