2011-05-26 11 views
5

से "सी ए, बी," एक सूची बनाना मैं एक द्विआधारी < < है >> और मैं इस द्विआधारी से जानकारी निकालने के लिए करना चाहते हैं।Erlang howto इस द्विआधारी <<"a,b,c">>

तो मुझे ए = ए, बी = बी और इसी तरह कुछ चाहिए। मुझे इस पर एक सामान्य दृष्टिकोण की आवश्यकता है क्योंकि बाइनरी स्ट्रिंग हमेशा बदलती है। तो यह हो सकता है < < "aaa", "bbb", "सीसीसी" >> ...

मैं एक सूची

erlang उत्पन्न करने की कोशिश: binary_to_list (< < "एक", "बी" , "सी" >>)

लेकिन मुझे परिणामस्वरूप स्ट्रिंग मिलती है।

"एबीसी"

धन्यवाद।

उत्तर

11

आपने सही विधि का उपयोग किया था।

binary_to_list(Binary) -> [char()]

पूर्णांकों जो बाइनरी के बाइट्स के अनुरूप की एक सूची देता है।

Erlang में कोई स्ट्रिंग प्रकार है: http://www.erlang.org/doc/reference_manual/data_types.html#id63119। कंसोल केवल स्ट्रिंग प्रतिनिधित्व में सूचियों को सौजन्य के रूप में प्रदर्शित करता है, यदि सभी तत्व प्रिंट करने योग्य ASCII रेंज में हैं।

आपको एरलांग के "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 वर्ण पढ़ने के लिए। Erlang का प्रारूप "कोड पॉइंट्स की सूची" में convert a binary UTF-8 string को तो, आप इस्तेमाल कर सकते हैं:

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">> वास्तव में कतरना पिछले कोड लेकिन जुड़ा हुआ विधि का उपयोग न करें)

+0

के लिए धन्यवाद अपने समय, समस्या यह है कि मुझे बाइनरी की सूची प्रस्तुत करने की आवश्यकता है। मैं एक बाइनरी से इस संरचना [{user, andreas}, {adress, germany}] जैसी कुछ बनाना चाहता हूं। मैं कभी नहीं जानता कि कितने बाइट आईडी को निकालना है, पहली टर्म {उपयोगकर्ता, adreas} प्राप्त करें। मैंने सोचा कि मैं एक बाइनरी << उपयोगकर्ता, एंड्रिया, एड्रेस, जर्मनी >> का उपयोग कर सकता हूं और इस बाइनरी को एक सूची में बदल सकता हूं ताकि मैं बाइनरी से जानकारी प्राप्त कर सकूं। – Andreas

+1

क्या आप दिए गए टोकन पर बाइनरी डेटा को विभाजित करना चाहते हैं? http: // stackoverflow।कॉम/प्रश्न/428124/कैसे-कर-i-split-a-binary-in-erlang – kay

+0

मैंने [link] पर समाधान की कोशिश की (http://stackoverflow.com/questions/428124/how-can-i-split -ए-बाइनरी-इन-एरलांग) और यह काम करता है लेकिन यह मेरी समस्या को हल करने का एक शानदार तरीका नहीं है क्योंकि मुझे अपने आवेदन में एक विशेष टोकन के उपयोग को रोकना होगा। – Andreas

संबंधित मुद्दे

 संबंधित मुद्दे