Elixir 为什么二进制字符串模式匹配生成的子字符串会转换为整数?
似乎源于模式匹配的二进制字符串的部分被转换为整数:Elixir 为什么二进制字符串模式匹配生成的子字符串会转换为整数?,elixir,Elixir,似乎源于模式匹配的二进制字符串的部分被转换为整数: iex(21)> <<type::size(8)>> = Base.decode16!("05") <<5>> iex(22)> type 5 iex(21)>=Base.decode16!("05") iex(22)>类型 5. 我希望type仍然是一个普通的二进制字符串,因为毕竟应用程序知道二进制表示什么类型的数据 我无法找到将子字符串保持为二进制字符串的方法。这是Erlang
iex(21)> <<type::size(8)>> = Base.decode16!("05")
<<5>>
iex(22)> type
5
iex(21)>=Base.decode16!("05")
iex(22)>类型
5.
我希望type
仍然是一个普通的二进制字符串,因为毕竟应用程序知道二进制表示什么类型的数据
我无法找到将子字符串保持为二进制字符串的方法。这是Erlang实现的一个设计决定还是一个限制? < P>我不认为这个行为令人惊讶,我甚至说这是意料之中的。我认为这是一个设计决定而不是实现限制。 当您意识到二进制是什么时,这是很自然的-在: 二进制文件只是一个字节序列 用于创建二进制文件的主要语法也显示了这一点:
<<97, 98, 99, 100>>
我不认为这种行为令人吃惊,我甚至说这是意料之中的事。我认为这是一个设计决定而不是实现限制。 当您意识到二进制是什么时,这是很自然的-在: 二进制文件只是一个字节序列 用于创建二进制文件的主要语法也显示了这一点:
<<97, 98, 99, 100>>
=Base.decode16!(“05”)
将以二进制字符串的形式提供类型
,问题中的模式匹配是告诉VM以八位整数=Base.decode16的形式返回类型
!(“05”)
将以二进制字符串的形式提供类型
,问题中的模式匹配是告诉VM以八位整数的形式返回类型