2010-06-07 13 views
5

मैं इस तरह की एक पंक्ति है:एक प्रतिस्थापन विवरण में हेक्साडेसिमल को दशमलव में कैसे परिवर्तित करें?

पैड (2) = 0x0041

मैं दशमलव में हेक्स बदल करना चाहते हैं और अपेक्षित परिणाम

पैड है (2) = 65

मैंने अभी :%s/\(.*\) = \(.*\)/\1 = \=printf("%d", submatch(2)) की कोशिश की, लेकिन यह असफल रहा।

क्या आप इसे हल करने में मदद करेंगे?

उत्तर

9

विम में str2nr() फ़ंक्शन है जो विभिन्न दशमलव प्रस्तुतियों को उनके दशमलव मानों में परिवर्तित करने के लिए है। हेक्स मान परिवर्तित करने के लिए आप इस तरह इसका इस्तेमाल कर सकते हैं:

s/0x[0-9a-fA-F]\+/\=str2nr(submatch(0), 16) 
+0

ओह करने के लिए अपने कोड बदल सकते हैं। बहुत बहुत धन्यवाद और आपकी विधि काफी उपयोगी है। लेकिन अगर कथन में [ए-एफ] हैं तो विधि विफल हो जाती है। – stefanzweig

+0

@stefan: ओह, हां बिल्कुल :), मुझे उन पात्रों को शामिल करने के लिए मैच का विस्तार करना चाहिए ... – sth

+0

आपको बहुत बहुत धन्यवाद। यह निश्चित रूप से काम करता है। – stefanzweig

2

आपका कोड लगभग ठीक है, लेकिन, प्रलेखन के अनुसार:

जब स्थानापन्न स्ट्रिंग शुरू होता है "\ =" के साथ शेष को अभिव्यक्ति के रूप में व्याख्या किया जाता है। यह पुनरावर्ती रूप से काम नहीं करता है: के अंदर एक विकल्प() फ़ंक्शन अभिव्यक्ति स्ट्रिंग के लिए "\ =" का उपयोग नहीं कर सकता है।

तो, आप

%s/\(.*\) = \(.*\)/\=submatch(1)." = ".printf("%d", submatch(2)) 
+0

हाय ज़ीएक्स, बहुत बहुत धन्यवाद। मैं आपकी विधि का प्रयास करूंगा। अब मेरे पास लॉग इन करने का एक अच्छा तरीका है। :-) – stefanzweig

+1

यदि आप पहली छमाही में कुछ भी नहीं बदल रहे हैं (बस मिलान कर रहे हैं), तो आप प्रतिस्थापित स्ट्रिंग की शुरुआत कहां बदल सकते हैं, यह बदलने के लिए आप \ \ zs' का उपयोग करने पर विचार करना चाहेंगे: – rampion

+0

'% s/pad (। *) = \ zs0x [0-9 ए-एफए-एफ] \ +/\ = प्रिंट ("% d", सबमिच (2)) ' – rampion

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

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