1.原本是想实现这个功能:就是把<<"1">>变为"1":编程
通常用模式匹配来提取函数
原本认为Z="1"来着,结果打印Z为49,而后打印"1"的结果却为“1”。spa
后来经咱们组的leader的引导:code
能够看出[49]才等于"1" 而49不等于"1" ,咱们直到由于在erlang编程下,字符串其实就是列表,而单个字符不是列表,单个字符是列表项中的每一项元素。orm
因此 你的两个打印函数 等同于字符串
io:format("~p~n", [49]). io:format("~p~n", [[49]]).
为何这个模式匹配没有提出"1"呢?io
答:<<Z,_/binary>> = <<"1">>. 这个表达式其实就是列表的模式提取Z其编译
实就是提取了列表头(这句话是错的),Z为字符1,全部整数就49。form
Z就像是列表头,提出来了以后,列表头不是列表,而列表尾才是列表erlang
好比[1,2,3,4,5] = [T|P] 列表头T为整数1,而不是列表[1],而列表为P仍是一个列表为[2,3,4,5]。
由此能够得出本文开头的那个问题的解决办法:这个解决办法是正确的
可是上面的解释是错的,其实<<"1">>里面的"1"不是一个列表,只是代码这个字符‘1’,而后底层用其ASII码存起来就是49
总结:二进制类型里面只有放整数和字符串,别的类型会失败
整数:例如<<1,2,3>>表示底层1,2,3存放的8位二进制,
字符串:以下,其实就是其对应存放的ASCII码
其二进制里面的字符串还有下面的这种现象:
下面其实关于<<"1">>里面的"1"表明字符'1'的ASCII码与单独的"1"字符串是列表的区别能够经过一下图也是能够的:
P提取的是字符'1',其ASCII码为49,可是其实还有一个Q=[]空列表,因此字符串"1"其实就是[49]
再来看看<<"1">>的一样用两个来提取。
能够看获得Z提取的是字符'1',其ASCII码为49,和上面同样,后面的Rest为空二机制,不是空列表,能够看出其区别,在二进制里面的字符串不是列表。
2 在erlang里面把整数1变为字符串“1”
也就是列表[49],理解了这一点,就很容易作了,以下:
由于“1”实际上是列表[49],因此将将其放在列表里面,而后加上48,就好了,别的数字加上对应的就能够了
3字符串的链接
由于字符串在erlang里面就是列表,因此能够用这个字符++来链接,就像链接列表同样,以下示例:
4 写erlang列表数据到文件里面可是不带中括号[]
用io:format格式化输出,~s: 打印字符串的时候会不带[]和“”
下面有个大的例子,写入列表的数据到文件,可是不要中括号[]
编译erlc mylib_misc.erl,编译好了以后去运行,效果以下:
后面补充,发现有内置函数,好比<<"1">>变为“1”,有 binary_to_list ; 而后整数1变为"1"有integer_to_list
实现起来就更为简单了
其实erlang各类数据类型之间的转换,都有,下面有元组和列表之间的转换,还有列表到二进制之间的转换,由此能够推出,应该各类类型之间的转换都有