जवाबों:
0x उपसर्ग के बिना , आपको आधार को स्पष्ट रूप से निर्दिष्ट करने की आवश्यकता है, अन्यथा बताने का कोई तरीका नहीं है:
x = int("deadbeef", 16)
साथ 0x उपसर्ग, पायथन स्वचालित रूप से हेक्स और दशमलव भेद कर सकते हैं।
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
( इस उपसर्ग-अनुमान व्यवहार को लागू करने के लिए आपको आधार के रूप में निर्दिष्ट करना चाहिए0
; दूसरे पैरामीटर को छोड़ने का अर्थ है आधार -10 को ग्रहण करना।)
int("FFFF",16)
-1 में परिवर्तित होना चाहता हूं ।
किसी भी दिए गए स्ट्रिंग के लिए:
int(s, 16)
अजगर में int करने के लिए हेक्स स्ट्रिंग परिवर्तित करें
मेरे पास ऐसा हो सकता है
"0xffff"
या बस"ffff"
।
एक स्ट्रिंग को एक इंट में बदलने के लिए, स्ट्रिंग को int
उस आधार के साथ पास करें जिससे आप परिवर्तित कर रहे हैं।
इस तरह से रूपांतरण के लिए दोनों तार पर्याप्त होंगे:
>>> string_1 = "0xffff"
>>> string_2 = "ffff"
>>> int(string_1, 16)
65535
>>> int(string_2, 16)
65535
int
अनुमानयदि आप आधार के रूप में 0 पास करते हैं, int
तो स्ट्रिंग में उपसर्ग से आधार का अनुमान लगाएगा।
>>> int(string_1, 0)
65535
हेक्साडेसिमल उपसर्ग के बिना, 0x
, int
पर्याप्त जानकारी है जिसके साथ लगता है की जरूरत नहीं है:
>>> int(string_2, 0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 0: 'ffff'
यदि आप स्रोत कोड या एक दुभाषिया में टाइप कर रहे हैं, तो पायथन आपके लिए रूपांतरण करेगा:
>>> integer = 0xffff
>>> integer
65535
यह साथ काम नहीं करेगा ffff
क्योंकि पायथन को लगेगा कि आप इसके बजाय एक वैध पायथन नाम लिखने की कोशिश कर रहे हैं:
>>> integer = ffff
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'ffff' is not defined
पायथन संख्या एक संख्यात्मक चरित्र से शुरू होती है, जबकि पायथन नाम एक संख्यात्मक चरित्र से शुरू नहीं हो सकता है।
ऊपर दिए गए डैन के उत्तर को जोड़ना: यदि आप हेक्स स्ट्रिंग के साथ इंट () फ़ंक्शन की आपूर्ति करते हैं, तो आपको आधार को 16 के रूप में निर्दिष्ट करना होगा या यह नहीं लगेगा कि आपने इसे एक वैध मान दिया है। आधार संख्या 16 को निर्दिष्ट करना हेक्स संख्या के लिए अनावश्यक है जो तार में समाहित नहीं है।
print int(0xdeadbeef) # valid
myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid
सबसे खराब तरीका:
>>> def hex_to_int(x):
return eval("0x" + x)
>>> hex_to_int("c0ffee")
12648430
eval
साथ अन्य सभी मुद्दों के शीर्ष पर भी बेतुका धीमा है।
int(s,16)
अनुचित मूल्यों को वापस करने के मुद्दों का सामना करने के बाद ऐसा कर रहा था , जिससे मेरे रनटाइम ( int(hex(value),16) == int(value) >>> False
) के साथ कुछ प्रमुख मुद्दे पैदा हो गए । आपूर्ति की गई स्ट्रिंग eval()
सुरक्षित थी और लौटाया गया मान उचित था।
या ast.literal_eval
(यह सुरक्षित है, इसके विपरीत eval
):
ast.literal_eval("0xffff")
डेमो:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
फ़ॉर्मेटर विकल्प '% x'% मेरे लिए असाइनमेंट स्टेटमेंट में भी काम करता है। (पायथन 3.0 मानकर और बाद में)
उदाहरण
a = int('0x100', 16)
print(a) #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
print(b)
आउटपुट करेगा 256
, नहीं 100
और print(c)
आउटपुट करेगा 100
, नहीं 256
। यह भी ध्यान दें कि c
यह एक स्ट्रिंग है, लेकिन a
ऐसा नहीं है कि आपका जवाब वास्तव में एक इंट को स्ट्रिंग में परिवर्तित करता है, न कि दूसरे तरीके के आसपास (यह वही है जो सवाल है)।
यदि आप अजगर दुभाषिया का उपयोग कर रहे हैं, तो आप केवल 0x (आपका हेक्स मान) टाइप कर सकते हैं और दुभाषिया इसे आपके लिए स्वचालित रूप से परिवर्तित कर देगा।
>>> 0xffff
65535
हेक्स, ऑक्टल, बाइनरी, इंट, और फ्लोट को संभालता है
मानक उपसर्गों (यानी 0x, 0b, 0, और 0o) का उपयोग करके यह फ़ंक्शन किसी भी उपयुक्त स्ट्रिंग को संख्या में बदल देगा। मैंने इसका उत्तर यहाँ दिया: https://stackoverflow.com/a/58997070/2464381 लेकिन यहाँ आवश्यक कार्य है।
def to_number(n):
''' Convert any number representation to a number
This covers: float, decimal, hex, and octal numbers.
'''
try:
return int(str(n), 0)
except:
try:
# python 3 doesn't accept "010" as a valid octal. You must use the
# '0o' prefix
return int('0o' + n, 0)
except:
return float(n)
'0x' उपसर्ग के साथ, आप eval फ़ंक्शन का उपयोग भी कर सकते हैं
उदाहरण के लिए
>>a='0xff'
>>eval(a)
255
ast.literal_eval
।