문제

Erlang에서 두 바이너리를 어떻게 연결합니까?

예를 들어, 내가 가지고 있다고 가정 해 봅시다.

B1 = <<1,2>>.
B2 = <<3,4>>.

B1과 B2를 연결하려면 어떻게 << 1,2,3,4 >> 인 이진 B3을 생성합니까?

내가 이것을 묻는 이유는 일부 네트워킹 프로토콜을위한 패킷을 인코딩하기 위해 코드를 작성하기 때문입니다. 패킷의 필드에 대한 인코더를 작성하여 이것을 구현하고 있으며 전체 패킷을 구축하기 위해 해당 필드를 연결해야합니다.

어쩌면 나는 이것을 잘못하고 있습니다. 패킷을 정수 목록으로 빌드하고 마지막 순간에 목록을 바이너리로 변환해야합니까?

도움이 되었습니까?

해결책

대답은 그렇지 않습니다. Gen_TCP : Send는 깊은 목록을 수락합니다. 따라서 연결은 간단합니다.

B3 = [B1, B2].

이것은 O (1)입니다. 일반적으로 이러한 종류의 데이터를 처리 할 때는 항상 깊은 목록 구조를 구축하고 IO 루틴이 구조를 출력 할 때 구조를 걸을 수 있습니다. 유일한 합병증은 모든 중간 루틴이 깊은 목록을 받아 들일 것입니다.

다른 팁

28> B1= <<1,2>>.
<<1,2>>
29> B2= <<3,4>>.
<<3,4>>
30> B3= <<B1/binary, B2/binary>>.
<<1,2,3,4>>
31>

io_list를 사용하려면 다음을 수행 할 수 있습니다.

erlang:iolist_to_binary([<<"foo">>, <<"bar">>])

멋지고 읽을 수 있습니다. 더 편리한 경우 목록과 물건을 사용할 수도 있습니다.

마지막 답변을 구축하려면 :

bjoin(List) ->
    F = fun(A, B) -> <<A/binary, B/binary>> end,
    lists:foldr(F, <<>>, List).

erlang 함수 list_to_binary (list) 사용 설명서를 여기에서 찾을 수 있습니다.http://www.erlang.org/documentation/doc-5.4.13/lib/kernel-2.10.13/doc/html/erlang.html#list_to_binary/1

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top