मेरे पास एक सेल है जिसमें यह मान है:
0x00006cd2c0306953
और मैं इसे एक संख्या में बदलना चाहता हूं।
मैंने कोशिश की:
=HEX2DEC(C8)
C8
मेरी हेक्स मान वाली सेल कहां है
मुझे #NUM त्रुटि मिलती है।
मैं क्या गलत कर रहा हूं?
मेरे पास एक सेल है जिसमें यह मान है:
0x00006cd2c0306953
और मैं इसे एक संख्या में बदलना चाहता हूं।
मैंने कोशिश की:
=HEX2DEC(C8)
C8
मेरी हेक्स मान वाली सेल कहां है
मुझे #NUM त्रुटि मिलती है।
मैं क्या गलत कर रहा हूं?
जवाबों:
आप बस उपयोग कर सकते हैं:
HEX2DEC(right(A1,(len(A1)-2)))
len(A1)
आपको 0x
स्ट्रिंग की लंबाई देता है । की लंबाई 0x
को छोड़कर, शेष स्ट्रिंग हेक्स संख्या है। डिक प्राप्त करने के लिए एक्सेल फ़ंक्शन का उपयोग करें।
HEX2DEC
अधिकतम दस हेक्स अंकों को स्वीकार करता है। प्रश्न में स्ट्रिंग 0x00006cd2c0306953
, 18 वर्ण लंबा है। आपका समाधान मूल्यांकन करता है RIGHT(A1,(LEN(A1)-2))
; 182 16 है, इसलिए RIGHT(…)
रिटर्न 00006cd2c0306953
, जो 16 अंकों का है। यहां तक कि अगर आप अग्रणी शून्य से पट्टी करते हैं, तो आपके पास 12 अंक हैं, जो अभी भी बहुत सारे हैं। यदि आप इसे काम करने के लिए प्राप्त कर सकते हैं, तो कृपया अपने कॉन्फ़िगरेशन का वर्णन करें। (यानी, एक्सेल का कौन सा संस्करण आप उपयोग कर रहे हैं? और क्या आपने इसे काम करने के लिए कुछ भी मुश्किल किया?)
जैसा कि TwiterZX ने संकेत दिया है, Hex2Dec
का इनपुट 10 वर्णों तक सीमित है और 6cd2c0306953
12 वर्णों का है। तो यह काम नहीं करेगा लेकिन उसके लिए अपने स्वयं के फ़ंक्शन को रोल करें। VBA का उपयोग करते हुए, एक मॉड्यूल जोड़ें और निम्न कोड का उपयोग करें (अपनी आवश्यकताओं के आधार पर समायोजित करने की आवश्यकता हो सकती है)
' Force explicit declaration of variables
Option Explicit
' Convert hex to decimal
' In: Hex in string format
' Out: Double
Public Function HexadecimalToDecimal(HexValue As String) As Double
' If hex starts with 0x, replace it with &H to represent Hex that VBA will understand
Dim ModifiedHexValue As String
ModifiedHexValue = Replace(HexValue, "0x", "&H")
HexadecimalToDecimal = CDec(ModifiedHexValue)
End Function
Excel में, मान लें कि सेल A1 में 0x00006cd2c0306953
, A2 का फॉर्मूला =HexadecimalToDecimal(A1)
होगा 1.19652E+14
। कॉलम को शून्य दशमलव के साथ एक संख्या में प्रारूपित करें और परिणाम होगा 119652423330131
।
HEX2DEC 10 वर्णों तक सीमित है, लेकिन इसका मतलब यह नहीं है कि हम इसका उपयोग नहीं कर सकते। बस इसे कई बार उपयोग करें, एक बार में 10 वर्णों को बदलने के लिए और प्रत्येक उपयोग के लिए 2 की उपयुक्त शक्ति लागू करें।
= HEX2DEC(RIGHT(C8,10))+HEX2DEC(MID(C8,3,5))*POWER(16,10)
[डिस्क्लेमर: इस समय अनछुए]
बाद में: मैं अब एक स्प्रेडशीट पर हूं, परीक्षण के लिए तैयार हूं। MID में 3,5 को 3,6 में बदलें। हम्म .. अभी भी ठीक नहीं है।
यह बताता है कि HEX2DEC हस्ताक्षरित हेक्स मूल्यों पर काम कर रहा है, इसलिए पहला शब्द नकारात्मक हो रहा है। निश्चित रूप से क्यों नहीं, लेकिन यहाँ निश्चित संस्करण है जो 2 ^ 40 (या 16 ^ 10, जैसा कि हम हेक्स में काम कर रहे हैं) को ठीक करने के लिए कहते हैं:
= HEX2DEC(RIGHT(C8,10))+POWER(16,10) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
हालाँकि, यह केवल तभी काम करता है जब राइट (C8,10) नकारात्मक हो। यहाँ मेरा सामान्य समाधान है:
= HEX2DEC(RIGHT(C8,10))+IF(HEX2DEC(RIGHT(C8,10))<0,POWER(16,10),0) + HEX2DEC(MID(C8,3,6))*POWER(16,10)
Ugggh।
एक फ़ंक्शन का उपयोग किए बिना, इस रूपांतरण को करने का एक गंदा तरीका है (उस के लिए इस एक्सेल फोरम थ्रेड को देखें ) स्ट्रिंग में प्रत्येक वर्ण के मान की गणना करने के लिए इस सूत्र का उपयोग करना है, फिर उन योग करें। इसमें स्पष्ट रूप से संख्या को विघटित करने के लिए अस्थायी कोशिकाओं का उपयोग करना शामिल है:
=HEX2DEC(LEFT(RIGHT(A$1,ROW()),1))*POWER(16,ROW()-1)
मान लें कि आप इन अस्थायी कोशिकाओं को 1 से 16 की पंक्तियों पर रखते हैं, यह प्रत्येक वर्ण को निकालकर, दाईं ओर से शुरू करके, इसे एक मान में परिवर्तित करता है, फिर 16 की प्रासंगिक शक्ति को लागू करता है। अपना मूल्य प्राप्त करने के लिए सभी 16 कोशिकाओं को योग करें।
16^(ROW() - 1)
बहुत साफ है और पढ़ने में आसान हैPOWER()
सुनिश्चित करें कि आपका कॉलम जिसमें HEX नंबर हैं, वह 0x नहीं है। HEX नंबर C8 होना चाहिए, न कि 0xC8। आशा करता हूँ की ये काम करेगा।
यदि कोई प्रमुख या अनुगामी गैर-हेक्स (ABCDEF0123456789) वर्ण हैं, तो HEX2DEC विफल हो जाता है। रिक्त स्थान एक वास्तविक बारूदी सुरंग है क्योंकि वे दिखाई नहीं देते हैं। अक्सर हेक्स संख्या, स्ट्रिंग्स के रूप में प्रतिनिधित्व करती है, लॉग फ़ाइलों में अग्रणी और / या अनुगामी स्थान होते हैं। मुझे लगता है कि "= HEX2DEC (TRIM (A1)) आमतौर पर इस समस्या को ठीक कर देगा। हालांकि," = HEX2DEC (RIGHT (TRIM (A1), 10), 10) जैसे कुछ वर्ण HEX2DEC के 10 वर्ण सीमा के कारण आवश्यक हो सकते हैं।
इस फ़ंक्शन ने उपयोग का प्रयास बदल दिया है
=HEXDEC(C8)
तो हेक्स और डीईसी के बीच नंबर 2 के बिना
,
या ;
यहाँ