تحويل السلسلة السداسية إلى int في بايثون
سؤال
كيف يمكنني تحويل سلسلة سداسية عشرية إلى int في بايثون؟
قد يكون لدي مثل "0xffff
" أو فقط "ffff
".
المحلول
بدون البادئة 0x، فأنت بحاجة إلى تحديد القاعدة بشكل صريح، وإلا فلن تكون هناك طريقة لمعرفة:
x = int("deadbeef", 16)
مع البادئة 0x، يمكن لبيثون التمييز بين العلامة السداسية والعشرية تلقائيًا.
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
(أنت يجب تحديد 0
كقاعدة لاستدعاء سلوك تخمين البادئة هذا؛إن حذف المعلمة الثانية يعني افتراض الأساس 10.)
نصائح أخرى
وint(hexString, 16)
لا حيلة، ويعمل مع وبدون بادئة 0X:
>>> int("a", 16)
10
>>> int("0xa",16)
10
لأي سلسلة الصورة الممنوحة:
int(s, 16)
تحويل سلسلة عرافة إلى int في بايثون
وربما أكون قد أنها "0xffff"
أو "ffff"
فقط.
لتحويل سلسلة إلى int، تمرير السلسلة إلى 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
الرجاء لا تفعل هذا! م>
تحليلأو ast.literal_eval
(وهذا آمن، بخلاف eval
):
ast.literal_eval("0xffff")
العرض التوضيحي:
>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>>
في بيثون 2.7، لا يبدو int('deadbeef',10)
للعمل.
والأعمال التالية بالنسبة لي:
>>a = int('deadbeef',16)
>>float(a)
3735928559.0
يبدو أن خيار المنسق '%x' % يعمل في عبارات المهمة أيضًا بالنسبة لي.(بافتراض إصدار Python 3.0 والإصدارات الأحدث)
مثال
a = int('0x100', 16)
print(a) #256
print('%x' % a) #100
b = a
print(b) #256
c = '%x' % a
print(c) #100
إذا كنت تستخدم مترجم الثعبان، يمكنك فقط اكتب 0X (قيمة عرافة الخاص بك) ومترجم وتحويله تلقائيا بالنسبة لك.
>>> 0xffff
65535
ومع البادئة "0X"، قد أيضا استخدام وظيفة حدة التقييم
وعلى سبيل المثال
>>a='0xff'
>>eval(a)
255