2009-12-30 6 views
6

मैं एक एच/डब्ल्यू उपकरण है, जो सामान्य रूप से एक अंतरफलक के लिए एक सीरियल पोर्ट का उपयोग करता है, भेजने और एक पीसी यूआई कार्यक्रम के लिए द्विआधारी संदेशों को प्राप्त करने की है। मैं एक छोटे से वेब सर्वर है कि मैं एक वेब ब्राउज़र यूआई के साथ सीरियल पोर्ट यूआई को बदलने के लिए उपयोग करना चाहते हैं के साथ एक ईथरनेट पोर्ट और छोटे टीसीपी/आईपी जोड़ दिया है।पार्स हेक्स ASCII संख्याओं में?

संदेशों ज्यादातर चीजों के अनुरोध/प्रतिक्रिया तरह हैं, लेकिन कुछ वेब पृष्ठों के लिए मैं सभी जानकारी मैं पृष्ठ के लिए की जरूरत है पाने के लिए टीएक्स/आरएक्स लिए दो या अधिक संदेशों पड़ सकता है। मैं संदेश भेजने और पृष्ठ के लिए प्रतिक्रिया प्राप्त करने के लिए AJAX XMLHttpRequest() का उपयोग करूंगा।

एच/डब्ल्यू डिवाइस सीमित है संसाधन (सीपीयू & रैम) तो यह है कि अंत मैं सिर्फ एक छोटे से सीजीआई इंटरफ़ेस है कि बाहर जाने वाले संदेशों लेता है और उन्हें हेक्स ASCII (यानी दो हेक्स ASCII वर्ण के रूप में encodes बनाना चाहते पर सरल रखने के लिए/बाइट) ब्राउज़र जो कुछ जावा स्क्रिप्ट का उपयोग करेगा खेतों में गए संदेशों के अलावा लेने और उन्हें सांख्यिक वार्स में बदलने और उन्हें उपयोगकर्ता के लिए प्रदर्शित करने के लिए करने के लिए भेजने के लिए। ब्राउज़र से एच/डब्ल्यू डिवाइस पर भेजे गए संदेशों के लिए वही।

संदेशों में फ़ील्ड प्रकारों का मिश्रण होता है, & हस्ताक्षरित बाइट्स, शॉर्ट्स, लम्बे, फ्लोट्स पर हस्ताक्षर किए जाते हैं, और संदेशों में अधिकतर एंडियन बाइट ऑर्डर में अधिक जटिल होते हैं।

मैं एच/डब्ल्यू एंड कोड को संभाल सकता हूं, लेकिन मैं जावा स्क्रिप्ट सीखने के लिए संघर्ष कर रहा हूं और हेक्स ASCII < -> ब्राउज़र अंत में संख्याओं का अनुवाद करने के लिए फ़ंक्शन के साथ सहायता का उपयोग कर सकता हूं।

कोई विचार? कोई उदाहरण कोड कुछ कहां?

धन्यवाद, पॉल

+0

http: // stackoverflow।कॉम/प्रश्न/57803/कैसे-टू-कन्वर्ट-दशमलव-टू-हेक्स-इन-जावास्क्रिप्ट –

उत्तर

22

लगता है कि आपने parseInt चाहते हैं। यह एक स्ट्रिंग और एक वैकल्पिक मूलांक (जो हमेशा आपूर्ति की जानी चाहिए) लेता है, और है कि मूलांक में एक पूर्णांक (या एक मूलांक नंबर का प्रारूप के आधार पर करता है, तो कोई भी आपूर्ति की जाती है, जिसके कारण आप हमेशा एक की आपूर्ति करना चाहिए के रूप में संख्या को पार्स करता है , लोगों कि parseInt("010") रिटर्न 8) आश्चर्य कर रहे हैं।

> parseInt("ab", 16) 
171 

वापस हेक्स में बदलने के लिए, आप उपयोग कर सकते हैं toString:

> var num = 16 
> num.toString(16) 
"10" 

नोट आप इसे पैड बाहर करने के लिए दो पात्रों से अपने आप को करना होगा कि अगर यह के रूप में केवल एक ही चरित्र बाहर आता है:

> num = 5 
> num.toString(16) 
"5" 

मैं ऊब गया था, इसलिए मैं कुछ कार्यों लिखा था आप के लिए दोनों दिशाओं में रूपांतरण करना है:

function parseHexString(str) { 
    var result = []; 
    // Ignore any trailing single digit; I don't know what your needs 
    // are for this case, so you may want to throw an error or convert 
    // the lone digit depending on your needs. 
    while (str.length >= 2) { 
     result.push(parseInt(str.substring(0, 2), 16)); 
     str = str.substring(2, str.length); 
    } 

    return result; 
} 

function createHexString(arr) { 
    var result = ""; 
    for (i in arr) { 
     var str = arr[i].toString(16); 
     // Pad to two digits, truncate to last two if too long. Again, 
     // I'm not sure what your needs are for the case, you may want 
     // to handle errors in some other way. 
     str = str.length == 0 ? "00" : 
       str.length == 1 ? "0" + str : 
       str.length == 2 ? str : 
       str.substring(str.length-2, str.length); 
     result += str; 
    } 

    return result; 
} 

कौन सा रूप में इस्तेमाल किया जा सकता है:

> parseHexString("abcd100001") 
[171, 205, 16, 0, 1] 
> createHexString([0, 1, 2, 10, 20, 100, 200, 255, 1000, 2000]) 
"0001020a1464c8ffe8d0" 
> parseHexString(createHexString([0, 1, 2, 10, 20, 100, 200, 255, 1000, 2000])) 
[0, 1, 2, 10, 20, 100, 200, 255, 232, 208] 
+0

इसलिए जावास्क्रिप्ट का उपयोग करके, मैं एएससीआईआई हेक्स स्ट्रिंग को एक चार सरणी को दो चार स्ट्रिंग में परिवर्तित करने वाले चार सरणी के रूप में पार्स कर दूंगा, फिर parseInt का उपयोग करें() इसे एक बाइट में बदलने और इसे बाइट सरणी में डालने के परिणामस्वरूप एएससीआईआई हेक्स स्ट्रिंग का आकार बाइट सरणी 1/2 है? फिर प्रत्येक फ़ील्ड के लिए बाइट सरणी से बाइट्स चुनें, और एंडियन बाइट स्वैपिंग को संभालें (क्या इसके लिए कोई फ़ंक्शन है?)? और संदेशों के लिए दूसरी तरफ जाने के लिए, बाइट को दो ASCII हेक्स वर्णों में परिवर्तित करने के लिए जावास्क्रिप्ट फ़ंक्शन क्या है? बीटीडब्ल्यू, बहुत धन्यवाद पॉल – Paul

+0

इससे मुझे शुरुआत करने में मदद करनी चाहिए। बहुत धन्यवाद। अब मुझे बस इसके चारों ओर कुछ सरणी हैंडलिंग करना है और इसे करना चाहिए। धन्यवाद, पॉल – Paul

6

आप parseInt() समारोह के लिए देख रहे:

x = "0xff"; 
y = parseInt(x, 16); 
alert(y); //255 
3

किया आप इन 2 कार्यों की तरह कुछ के लिए देख रहा?

<html> 
    <head> 
    <script type="text/javascript"> 
     function hex2Decimal(hex) 
     { 
      return parseInt("0x"+hex); 
     } 

     function decimal2Hex(num) 
     { 
      return num.toString(16); 
     } 
    </script> 

    </head> 
    <body> 

     <script type="text/javascript"> 
      document.write(hex2Decimal("A") + "<br />"); 
      document.write(decimal2Hex(16) + "<br />"); 
     </script> 
    </body> 
</html> 
+0

हाँ, ऐसा कुछ। मूल रूप से विचार की तरह एक सी struct रखना है: struct message_1 { double value_1; unsigned long value_2; signed short value_3; char[6] string_1; } और यह एक हेक्स ASCII स्ट्रिंग में बदल जाएंगे और ब्राउज़र जहाँ मैं (संदेश प्रकार के आधार पर संरचना जानने) व्यक्तिगत मूल्यों को वापस परिवर्तित के लिए भेज और उपयोगकर्ता के लिए कुछ/सभी डेटा प्रदर्शित करें। धन्यवाद, पॉल – Paul