我刚开始在 Erlang 上的道路,我遇到了一个我无法解决的问题:
我写了一个方法来将域表示为二进制字符串,即 <<"www.404pagenotfound.com">> 并将其转换为 DNS 协议所需的域格式,因此:<<3,"www",15 "pagenotfound",3,"com">>.
在下面的代码中(我以不同的方式重写了很多次):
domainbyte(Bin) ->
if byte_size(Bin) > 0 ->
Res = binary:split(Bin, <<".">>),
[Chunk|[RestList]] = Res,
ChunkSize = byte_size(Chunk),
if length(RestList) > 0 ->
Rest = domainbyte(RestList), %% <- Got "bad argument" here!
<<ChunkSize/binary,Chunk,Rest>>;
true ->
<<ChunkSize/binary,Chunk>>
end
end.
提前谢谢任何线索。
PS。
感谢评论,我在上面的代码中发现了错误:
if length(RestList) > 0 -> %% here RestList is binary data so length throw "bad argument" error.
我以这种方式重写了该方法,但仍然没有运气:
**注意:我能够修复以下代码,问题是如果你有一个二进制块并且你想在另一个二进制字符串中使用它,你必须在它上面指定 /binary:这对我来说并不明显。
即:考虑这个小代码片段:
**
TT = <<"com">>, SS = <<3, TT, 0>> %% <- 你得到错误:参数错误
** 必须以这种方式修复:**
TT = <<"com">>, SS = <<3, TT/二进制, 0>>
domainbyte(Bin) ->
if byte_size(Bin) > 0 ->
Res = binary:split(Bin, <<".">>),
if length(Res) > 1 ->
[Chunk|[RestList]] = Res,
ChunkSize = byte_size(Chunk),
Rest = domainbyte(RestList),
<<ChunkSize,Chunk,Rest>>;
true ->
[Chunk] = Res,
ChunkSize = byte_size(Chunk),
<<ChunkSize,Chunk>>
end
end.
甲基苯丙胺