Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 无法使用Elixir中的二进制运算符提取部分字符串_String_Binary_Elixir - Fatal编程技术网

String 无法使用Elixir中的二进制运算符提取部分字符串

String 无法使用Elixir中的二进制运算符提取部分字符串,string,binary,elixir,String,Binary,Elixir,您好,我正在尝试理解如何使用Elixir中的二进制文件,我正在尝试解析字符串 "2018-04-07 13:00:00.000000" 我想得到他们今年的部分,我做了以下几件事 date = "2018-04-07 13:00:00.000000" << d::size(80), rest::binary >> = date 237007314493411930484791 但是如果我试图得到d,我并不真正理解我得到了什么,但是输出如下 date = "2018-0

您好,我正在尝试理解如何使用Elixir中的二进制文件,我正在尝试解析字符串

"2018-04-07 13:00:00.000000"
我想得到他们今年的部分,我做了以下几件事

date = "2018-04-07 13:00:00.000000"
<< d::size(80), rest::binary >> = date
237007314493411930484791
但是如果我试图得到d,我并不真正理解我得到了什么,但是输出如下

date = "2018-04-07 13:00:00.000000"
<< d::size(80), rest::binary >> = date
237007314493411930484791
你们能帮我弄清楚发生了什么吗


谢谢。

您的问题的解决方案是使用二进制大小,如下所示:>=日期

本报告的以下摘录应作相应澄清:

一个位字符串由许多段组成,每个段都有一个类型。 位字符串中使用了9种类型: -整数 -浮动 -位字符串的位别名 -位串 -二进制的 -二进制文件的字节别名 -utf8 -utf16 -utf32未指定类型时,默认值为整数


例如,>=date会给出与您报告的结果相同的结果。

问题的解决方案是使用二进制大小,如下所示:>=date

本报告的以下摘录应作相应澄清:

一个位字符串由许多段组成,每个段都有一个类型。 位字符串中使用了9种类型: -整数 -浮动 -位字符串的位别名 -位串 -二进制的 -二进制文件的字节别名 -utf8 -utf16 -utf32未指定类型时,默认值为整数


例如,>=date会给出与您报告的结果相同的结果。

虽然凯文·约翰逊提供的答案完美地解释了如何处理二进制文件,但我将发布对实际发生情况的解释

Erlang中的二进制文件以及Elixir中的二进制文件可以使用字符的ASCII值创建:

iex | 1▶ ⇒ 20 当模式匹配到size80时,实际上模式匹配到256基中整数的10个位置。基本上,情况就是这样:

iex | 2▶ = 2018-04-07 13... ⇒ 2018-04-07 13... 让我们检查一下我们的值是的,整数数组尽可能以位字符串的形式打印出来,注意单引号:

iex | 3▶ [a1、a2、a3、a4、a5、a6、a7、a8、a9、a10] ⇒ '2018-04-07' 好的,到目前为止还不错。现在让我们从上面的整数中得到结果。它将是:

a10*1+a9*256+a8*256²+。。。 或者,使用有限的长生不老药算术能力:

iex | 4▶ [a1、a2、a3、a4、a5、a6、a7、a8、a9、a10] ...|4 ▷ |> 反向枚举 ...|4 ▷ |> 使用_索引枚举 ...|4 ▷ |> Enum.reduce0,fn{e,i},acc-> ...|4 ▷ ⇓⇓⇓ 256的精确整数i次方⇓⇓⇓ ...|4 ▷ acc+e*Enum.reduceList.duplicate256、i、1和内核。*/2 ...|4 ▷ 终止 ⇒ 237007314493411930484791
这正是您在要求将前10个位置与基于256位的10位数字进行模式匹配时得到的结果。

凯文·约翰逊提供的答案完美地解释了如何处理二进制文件,我将发布实际情况的解释

Erlang中的二进制文件以及Elixir中的二进制文件可以使用字符的ASCII值创建:

iex | 1▶ ⇒ 20 当模式匹配到size80时,实际上模式匹配到256基中整数的10个位置。基本上,情况就是这样:

iex | 2▶ = 2018-04-07 13... ⇒ 2018-04-07 13... 让我们检查一下我们的值是的,整数数组尽可能以位字符串的形式打印出来,注意单引号:

iex | 3▶ [a1、a2、a3、a4、a5、a6、a7、a8、a9、a10] ⇒ '2018-04-07' 好的,到目前为止还不错。现在让我们从上面的整数中得到结果。它将是:

a10*1+a9*256+a8*256²+。。。 或者,使用有限的长生不老药算术能力:

iex | 4▶ [a1、a2、a3、a4、a5、a6、a7、a8、a9、a10] ...|4 ▷ |> 反向枚举 ...|4 ▷ |> 使用_索引枚举 ...|4 ▷ |> Enum.reduce0,fn{e,i},acc-> ...|4 ▷ ⇓⇓⇓ 256的精确整数i次方⇓⇓⇓ ...|4 ▷ acc+e*Enum.reduceList.duplicate256、i、1和内核。*/2 ...|4 ▷ 终止 ⇒ 237007314493411930484791
当您要求将前10个位置与基于256的10位数字进行模式匹配时,这正是您得到的结果。

对所发生的情况进行了很好的解释。非常有帮助!很好地解释了发生的事情。非常有帮助!