【发布时间】:2012-10-06 18:56:28
【问题描述】:
我刚开始使用 Erlang,遇到了一个我无法解决的问题:
我写了一个方法,将域表示为二进制字符串,即 > 并将其转换为 DNS 协议所需的域格式,因此:>.
下面是代码(我用不同的方式重写了很多次):
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。
感谢 cmets 我在上面的代码中发现了错误:
if length(RestList) > 0 -> %% here RestList is binary data so length throw "bad argument" error.
我已经以这种方式重写了该方法,但仍然没有运气:
**注意:我能够修复下面的代码,问题是如果你有一个二进制块并且你想在另一个二进制字符串中使用它,你必须在它上面指定 /binary:一些不明显的东西我。
即:考虑这个小代码片段:
**
TT = >, SS = > %%
** 必须以这种方式修复: **
TT = >, SS = >
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.
MdP
【问题讨论】:
-
请不要在代码中的 cmets 中隐藏您的问题...
-
<<"www.404pagenotfound.com">>的输出不应该是<<3,"www",15,"404pagenotfound",3,"com">>吗? -
谢谢@rvirding,是的,这是一个类型,我更正了原帖。
-
@user1750572 是的,您是对的,但是由于您编写的内容,目前的代码仍然会崩溃。