A = <<"hello">>.
B = <<A:80/binary, 100:8>>.
它给了我:
**异常错误:错误的参数
和<<"hello">>.
有效,但是:
A = "hello".
<<A>>.
无法正常工作。
答案 0 :(得分:4)
A
没有80字节的大小,在第一种情况下显然与A:80/binary
不匹配。
1> A = <<"hello">>.
<<"hello">>
2> B = <<A/binary, 100:8>>.
<<"hellod">>
3> Pad = 80 - size(A), C = <<A/binary, 0:Pad/unit:8, 100:8>>.
<<104,101,108,108,111,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,...>>
<<"hello">>
是<<$h,$e,$l,$l,$o>>
的语法糖。默认情况下,位语法表达式假定为8/integer,unsigned,big,unit:1
类型规范。 A
不是整数,因此<<A>>
会在第二种情况下引发badarg
异常。
答案 1 :(得分:0)
值&lt;&lt;“Hello”&gt;&gt;但只是因为“Hello”是一个字符串文字。当你写作时,
A = "Hello",
您正在创建一个String对象,它实际上是一个unicode代码点列表。现在,当你宣布时,
<<A>>
然后A
被假定为整数,因为它是默认值。当你尝试为整数注入一个列表/字符串时,自然会出现问题,这就是badarg的原因。
解决方案有两个方面:
list_to_binary(A)
会将列表转换为二进制文件。现在你有<<A/binary>>
的等价物,你可以操纵它:
L = byte_size(A),
<<L:32/integer, A/binary>>