我有一個二進制< <「a,b,c」>>我想從這個二進制文件中提取信息。Erlang howto從這個二進制列表<<"a,b,c">>
所以我想有像A = a,B = b等等。 我需要一個通用的方法,因爲二進制字符串總是改變。 所以它可能是< < 「AAA」, 「BBB」, 「CCC」 >> ...
我試圖生成一個列表
二郎:binary_to_list(< < 「A」, 「B」 ,「c」>>)
但我得到字符串作爲結果。
「abc」
謝謝。
我有一個二進制< <「a,b,c」>>我想從這個二進制文件中提取信息。Erlang howto從這個二進制列表<<"a,b,c">>
所以我想有像A = a,B = b等等。 我需要一個通用的方法,因爲二進制字符串總是改變。 所以它可能是< < 「AAA」, 「BBB」, 「CCC」 >> ...
我試圖生成一個列表
二郎:binary_to_list(< < 「A」, 「B」 ,「c」>>)
但我得到字符串作爲結果。
「abc」
謝謝。
您確實使用了正確的方法。
binary_to_list(Binary) -> [char()]
返回其對應的二進制字節的整數列表。
Erlang沒有字符串類型:http://www.erlang.org/doc/reference_manual/data_types.html#id63119。如果所有元素都在可打印的ASCII範圍內,則控制檯僅在字符串表示中顯示列表作爲禮貌。
您應該閱讀Erlang的"Bit Syntax Expressions"文檔以瞭解如何使用二進制文件。
如果您不需要列表表示,請不要將整個二進制文件轉換爲列表!
提取前三個字節你可以使用
<<A, B, C, Rest/binary>> = <<"aaa","bbb","ccc">>.
如果你想遍歷二進制數據,你可以使用二進制的理解。
<< <<(F(X))>> || <<X>> <= <<"aaa","bbb","ccc">> >>.
模式匹配是可能的,太:
test(<<A, Tail/binary>>, Accu) -> test(Tail, Accu+A);
test(_, Accu) -> Accu.
882 = test(<<"aaa","bbb","ccc">>, 0).
即使是在一次讀取一個UTF-8字符。因此,要convert a binary UTF-8 string成Erlang的格式「的碼點名單」,你可以使用:
test(<<A/utf8, Tail/binary>>, Accu) -> test(Tail, [A|Accu]);
test(_, Accu) -> lists:reverse(Accu).
[97,97,97,600,99,99,99] = test(<<"aaa", 16#0258/utf8, "ccc">>, "").
(注意,`<<"aaa","bbb","ccc">> = <<"aaabbbccc">>
不實際使用剪斷了最後的代碼,但鏈接的方法)
感謝您時間,問題是我需要二進制的列表表示。我想從一個二進制文件構建這樣的結構[{user,andreas},{adress,germany}]。我永遠不知道有多少字節ID必須提取獲取第一個Term {user,adreas}。我以爲我可以使用二進制<< user,andreas,adress,germany >>並將此二進制文件轉換爲列表,以便我可以從二進制文件中獲取信息。 – Andreas 2011-05-26 20:07:19
你想在給定的令牌上分割二進制數據嗎? HTTP://計算器。com/questions/428124/how-can-i-split-a-binary-in-erlang – kay 2011-05-26 20:40:43
我在[link](http://stackoverflow.com/questions/428124/how-can-i-split -a-binary-in-erlang),它的工作原理,但它不是一個優雅的方式來解決我的問題,因爲我將不得不在我的應用程序中使用一個特殊的令牌。 – Andreas 2011-05-26 21:08:30