私は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.
手がかりについては、事前に Thx.
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.
MDP