আমি কীভাবে পাইথনের কোনও হেক্স স্ট্রিংকে ইনটিতে রূপান্তর করব?
আমার কাছে এটি " 0xffff
" বা " " হিসাবে থাকতে পারে ffff
।
আমি কীভাবে পাইথনের কোনও হেক্স স্ট্রিংকে ইনটিতে রূপান্তর করব?
আমার কাছে এটি " 0xffff
" বা " " হিসাবে থাকতে পারে ffff
।
উত্তর:
0x উপসর্গ ব্যতীত আপনাকে বেসটি স্পষ্টভাবে উল্লেখ করতে হবে, অন্যথায় এটি বলার উপায় নেই:
x = int("deadbeef", 16)
0x উপসর্গ দিয়ে পাইথন হেক্স এবং দশমিক স্বয়ংক্রিয়ভাবে পার্থক্য করতে পারে।
>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10
( এই উপসর্গ-অনুমানের আচরণটি শুরু করার জন্য আপনাকে অবশ্যই0
বেস হিসাবে নির্দিষ্ট করতে হবে ; দ্বিতীয় প্যারামিটার বাদ দেওয়া মানে বেস -10 অনুমান করা)
int("FFFF",16)
-১ এ রূপান্তর করতে চাই ।
যে কোনও স্ট্রিংয়ের জন্য:
int(s, 16)
হেক্স স্ট্রিংটি পাইথনে ইন-তে রূপান্তর করুন
আমি এটা
"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
বিষয় এটির সাথে অন্যান্য সমস্ত ইস্যুতে শীর্ষস্থানীয় abs
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'% ফর্ম্যাটর বিকল্পটি আমার জন্যও এসাইনমেন্ট স্টেটমেন্টে কাজ করে বলে মনে হচ্ছে। (পাইথন ৩.০ এবং তারপরে ধরে নেওয়া)
উদাহরণ
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, 0 বি, 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' উপসর্গ সহ, আপনি ইওল ফাংশনও ব্যবহার করতে পারেন
উদাহরণ স্বরূপ
>>a='0xff'
>>eval(a)
255
ast.literal_eval
।