2012-02-24 17 views
15

डीकोड करें मेरे पास एक एरलांग प्रोग्राम है जो डेटा उत्पन्न करता है। आगे बढ़ने के लिए इस डेटा को udp के माध्यम से एक गैर-एरलांग प्रोग्राम में स्थानांतरित करने की आवश्यकता है। मेरे पास पहले से ही यह हिस्सा काम कर रहा है - udp के माध्यम से डेटा भेजना और इसे अन्य गैर-एरलांग पक्ष पर प्राप्त करना।स्ट्रिंग में एरलांग शब्दों को कनवर्ट करें, या एरोडैंग बाइनरी

यहां समस्या है। डेटा (सूचियों वाले टुपल्स जैसे एरलंग शब्द) "जैसा है" पर जाने में सक्षम नहीं लगता है (यानी मैं केवल मनमानी एरलांग शब्द नहीं भेज सकता)। यह स्पष्ट रूप से पहले पाठ या बाइनरी में परिवर्तित करने की जरूरत है। बाइनरी में कनवर्ट करना मुझे मिली बीआईएफ के साथ काफी आसान लगता है। समस्या यह है कि, द्विआधारी gobbledygook दूसरी तरफ आता है, और मुझे इसे डीकोड करने का कोई आसान तरीका नहीं पता (दूसरी तरफ गैर-erlang है)।

वर्जित किसी ने मुझे कुछ आसान तरीका बता दूसरी तरफ द्विआधारी गॉबल्डीगुक डिकोड करने के लिए, मैं डेटा चाहते हैं पदों की एक साधारण स्ट्रिंग प्रतिनिधित्व के रूप में भेजे जाने के लिए - उदाहरण के लिए इस तरह की एक टपल:

{[1,2,3],[4,5,6]} 

इस तरह भेजा:

"{[1,2,3],[4,5,6]}" 

मैं किसी भी तरह के BIF नहीं देखा है, यानी "convert_term_to_ascii/1" आदि मुझे लगता है मैं इसे स्कैन और पदों की टोकन अभ्यावेदन भेज सकता है पता है, लेकिन मैं नहीं चाहता ऐसा करने के लिए - दूसरी तरफ डीकोडिंग सिर्फ एक दर्द है जिसे मैं सौदा नहीं करना चाहता हूं साथ में।

मुझे पता है कि मैं इस समस्या के लिए पहला, दूसरा, या तीसरा व्यक्ति नहीं हूं। यह काफी आम होना चाहिए। यह आमतौर पर कैसे निपटाया जाता है?

क्या कोई मुझे कुछ संसाधनों के बारे में बता सकता है कि मुझे कैसे दिखाया जा सकता है 1) बाइनरी gobbledygook को ascii (non-erlang पक्ष पर आवश्यक) में परिवर्तित करें, या 2) सीधे शब्दों को एक स्ट्रिंग (erlang पक्ष पर आवश्यक) में परिवर्तित करें?

या, मुझे बताएं कि मैं कैसे गलत हूं और मुझे वास्तव में यह कैसे करना चाहिए?

धन्यवाद।

उत्तर

26

1) आप स्ट्रिंग के लिए किसी भी अवधि

R= io_lib:format("~p",[yourtermhere]), 
lists:flatten(R) 

2 का प्रयोग करके) आप erlang बाहरी द्विपदीय प्रारूप पर लग सकता है में बदल सकते हैं, अन्य भाषाओं का एक बहुत एनकोड के लिए पुस्तकालय हैं/डिकोड कि erlang बाइनरी प्रारूप। और erlang में आप term_to_binary

+0

बस एक संबंधित समस्या में भाग गया, जो कि बाइनरी या फॉर्म की स्ट्रिंग को परिवर्तित करता है जो फाइल के लिए वैध इनपुट होगा: एरलांग शब्दों में परामर्श/1, लेकिन फ़ाइल से शुरू नहीं होता है। मैंने अपने भविष्य के लिए समाधान दस्तावेज करने का फैसला किया, शायद दूसरों को यह उपयोगी लगेगा: http://zxq9.com/archives/1354 – zxq9

2

मैं ज्ञात पुस्तकालयों (rfc4267 के बारे में अच्छे शब्दों को सुनकर) के साथ एर्लांग शर्तों को JSON में परिवर्तित करने की अनुशंसा करता हूं। मुझे लगता है कि जेएसओएन को किसी भी गैर-एरलांग मंच के साथ वापस बदलने के लिए एक छोटा काम होगा।)

+1

द्वारा किसी भी शब्द को एन्कोड कर सकते हैं एक और एरलांग JSON लाइब्रेरी देखने के लायक है जेएसएक्स - मैं इसे सभी एरलांग सर्वर -> सी ++ क्लाइंट सामान के लिए उपयोग करता हूं और यह तेज़, भरोसेमंद और उपयोग करने में आसान है। – Seb

+0

JSON पर निर्णय लेने से पहले, ध्यान रखें कि Erlang और JSON प्रकारों के बीच कोई मैपिंग नहीं है। विशेष रूप से, जेएसओएन (और वाईएएमएल) परमाणुओं की कमी होती है, बाइनरी डेटा का प्रत्यक्ष प्रतिनिधित्व होता है, और संख्याओं के रूप में तारों के बीच एक अंतर (और उस फ्लोट बनाम पूर्णांक के भीतर)। आपको सूचियों से द्विआधारी से तारों और स्ट्रिंग से परमाणुओं को अलग करने के लिए एक मध्यवर्ती प्रारूप या योजनाबद्ध अनुवाद चुनना होगा, और प्रत्येक JSON lib इसे थोड़ा अलग तरीके से करेगा। बीआईएफ 'term_to_binary/1' <->' binary_to_term/1' सटीक हैं और विभिन्न भाषाओं के लिए बीईआरटी पुस्तकालयों (http://bert-rpc.org/) के साथ भी काम करते हैं। – zxq9

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