简单说下编码
计算机是只认识二进制数字的,像是英语字符,中文字符这些等等都会对应一个数字好让计算机进行处理,对于英文来说,ascii编码几百个数字就够用了,但是对于中文,日语其他国家的语言就不支持,于是出现了其他的编码方式,unicode的话也是其中一个,他决定了每个字符所对应的数字,但没有决定每个字符的编码方式,utf8,utf16这些才决定了他的编码方式是如何的。
erlang binary语法
这个东西真的感觉挺复杂的,但项目中多处用到了这个东西,之前一直把他和底层的二进制绑在一起看,始终搞不懂,后来发现自己想复杂了,把他当成和List一样作为数据处理的结构来理解就ojbk了。
它的语法就是这样<<E1,E2>>,其中Ei=Value | Value:Size | Value/TypeSpecifiterList | Value:Size/TypeSpecifiterList
Size是一个已知整数,它指明了片段的大小,默认值取决于不用的数据类型,对整数来说是8,可以把他看做Unit的单位
TypeSepcifierList 形式为 End-Sign-Type-Unit,任何一项都可以被省略,且任意排序
End 可以是 big | little | native 它指定了机器网络字节顺序
Sign 可以是signed | unsigned 只用于模式匹配
Type 可以是integer | float |binary | utf8 等等
Unit 写法是 unit:1|2…|256 interger,float,bitstring默认为1,binary为8
一个片段的总长度是Size * Unit字节,binary类型的数据长度必须是8的倍数
erlang中的binary其实可以当作字符串来使用,在binary里面的必须都是ASCII值为1-255之间的,之前一直不理解<<“abc”>>,其实<<“abc”>> = <<97,98,99>>。erlang真的是很蛋疼的一门语言,“abc” = [97,98,99],但是<<[97,98,99]>> =/= <<“abc”>>.。。。。。
erlang中文字符
list_to_binary不支持中文的装换,可以使用unicode:characters_to_binary()来进行转换,将多字节的符号转换成单字节表示的方式