当前位置:  开发笔记 > 编程语言 > 正文

为什么从二进制字符串模式匹配生成的子串转换为整数?

如何解决《为什么从二进制字符串模式匹配生成的子串转换为整数?》经验,为你挑选了1个好方法。

似乎源自模式匹配的二进制字符串的部分转换为整数:

iex(21)> <> = Base.decode16!("05")
<<5>>
iex(22)> type
5

我希望type保持一个普通的二进制字符串,因为毕竟应用程序知道二进制代表什么类型的数据.

我无法找到将子字符串保留为二进制字符串的方法.它是Erlang实现的设计决策还是限制?



1> michalmuskal..:

我不认为这种行为令人惊讶,我甚至会说它是预料之中的.我认为这是一个设计决策而不是实施限制.

当您意识到二进制文件是什么时,这很自然 - 在入门指南之后:

二进制只是一个字节序列.

创建二进制文件的主要语法也展示了这个:

<<97, 98, 99, 100>>

因此,模式匹配的主要方式也是基于字节(或通常为整数)的自然.幸运的是,这不是我们唯一的选择.有许多格式化程序,所有格式都记录在案Kernel.SpecialForms.<<>>/1.

要获得您期望的行为,您需要使用binary匹配类型(默认单位为binary8位,因此不是size(8)您想要的size(1)):

iex(3)> <> = Base.decode16!("05")
<<5>>
iex(4)> type
<<5>>

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有