2014-04-06 12 views
8

आप एक बाइट को एक बाइट में संदर्भित हेक्स कोड और जावास्क्रिप्ट में उलटा कैसे परिवर्तित करते हैं?एक हेक्स स्ट्रिंग को बाइट और बाइट में जावास्क्रिप्ट में एक हेक्स स्ट्रिंग में कैसे परिवर्तित करें?

var conv = require('binstring'); 
var hexstring ='80'; 
var bytestring = conv(hexstring, {in:'hex', out:'utf8'}); 
var backtohexstring = conv(bytestring, {in:'utf8', out:'hex'}); // != '80'??? 

backtohexstring सही हेक्स के लिए एक आने वाले डेटा स्ट्रिंग डीकोड (मैं भी UTF8 बनाम बाइट इस्तेमाल किया है, क्योंकि यह भेजे स्ट्रिंग की तरह 'देखा' जब कंसोल के लिए मुद्रित), तो मैं उलझन में हूँ ...

मैं भी इन दो देशी जावास्क्रिप्ट कार्यों पाया, डिकोडर मेरी भेजे धारा पर काम करता है, लेकिन मैं अभी भी हेक्स एन्कोड करने के लिए नहीं मिल सकता है ...

function encode_utf8(s) { 
    return unescape(encodeURIComponent(s)); 
} 
function decode_utf8(s) { 
    return decodeURIComponent(escape(s)); 
} 
+0

यकीन नहीं है कि मैं इसे प्राप्त करता हूं, आप उम्मीद करेंगे कुछ ऐसा करने के रूप में '5648' की तरह? – adeneo

+0

कोई बाइट नहीं। यकीन नहीं है कि मैं इसे यहां कैसे प्रस्तुत करूंगा ... – shaun5

उत्तर

18

यहाँ एक Node.js विशिष्ट दृष्टिकोण है, नोड मानक lib द्वारा प्रदान की बफर वर्ग का लाभ लेने के।

https://nodejs.org/api/buffer.html#buffer_buffers_and_character_encodings

बाइट प्राप्त करने के लिए (0-255) मूल्य:

Buffer.from('80', 'hex')[0]; 
// outputs 128 

और वापस कन्वर्ट करने के लिए:

Buffer.from([128]).toString('hex'); 
// outputs '80' 

UTF8 को बदलने के लिए:

Buffer.from('80', 'hex').toString('utf8'); 
+0

क्या यह एकाधिक हेक्स मानों के लिए काम करेगा? (मेरे पास वास्तव में कई हेक्स मान हैं जो स्ट्रिंग बनाते हैं) – shaun5

+0

हां, निश्चित रूप से। यह किसी भी लंबाई की हेक्स एन्कोडेड स्ट्रिंग के साथ काम करेगा। आप '[n]' नोटेशन का उपयोग करके प्रत्येक स्थिति पर बाइट प्राप्त कर सकते हैं, और संपूर्ण स्ट्रिंग को '.toString (' utf8 ') के माध्यम से utf8 प्रतिनिधित्व में परिवर्तित कर सकते हैं। –

+0

Node.js 6.0.0 के बाद से, 'नया बफर (आकार) 'बहिष्कृत किया गया था। कृपया 'Buffer.alloc (16,' हेक्स ') का उपयोग करें। ToString (' utf8 ')' इसके बजाय –

2

आप Number.prototype.toString और parseInt का उपयोग कर सकते ।

कुंजी आपके लिए रूपांतरण करने के लिए radix पैरामीटर का उपयोग करना है।

var bytestring = Number('0x' + hexstring).toString(10); // '128' 
parseInt(bytestring, 2).toString(16); // '80' 

+1

बाइट! = बाइनरी, तो मुझे जो चाहिए वह नहीं। – shaun5

+2

हुह, मुझे पता है कि यह बहुत देर हो चुकी है, लेकिन मैंने 'parseInt' को बाइनरी के बजाय दशमलव में बदलने के लिए तय किया है। इस पर मेरा ध्यान लाने के लिए नीचे वोट के लिए धन्यवाद अजनबी! – thgaskell

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

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