হেক্স স্ট্রিংটি পাইথনে ইন-তে রূপান্তর করুন


763

আমি কীভাবে পাইথনের কোনও হেক্স স্ট্রিংকে ইনটিতে রূপান্তর করব?

আমার কাছে এটি " 0xffff" বা " " হিসাবে থাকতে পারে ffff

উত্তর:


1086

0x উপসর্গ ব্যতীত আপনাকে বেসটি স্পষ্টভাবে উল্লেখ করতে হবে, অন্যথায় এটি বলার উপায় নেই:

x = int("deadbeef", 16)

0x উপসর্গ দিয়ে পাইথন হেক্স এবং দশমিক স্বয়ংক্রিয়ভাবে পার্থক্য করতে পারে।

>>> print int("0xdeadbeef", 0)
3735928559
>>> print int("10", 0)
10

( এই উপসর্গ-অনুমানের আচরণটি শুরু করার জন্য আপনাকে অবশ্যই0 বেস হিসাবে নির্দিষ্ট করতে হবে ; দ্বিতীয় প্যারামিটার বাদ দেওয়া মানে বেস -10 অনুমান করা)


25
যার অর্থ আপনার সর্বদা দ্বিতীয় যুক্তি হিসাবে 16 টি ব্যবহার করা উচিত। সুস্পষ্ট বর্ণিত চেয়ে ভাল।
বাচসৌ 13'18

13
@ বাছসাউ, স্পষ্টত অসত্য। আপনি যদি ব্যবহারকারী ইনপুট পড়তে চান, হেক্স বা দশমিক ইনপুট মঞ্জুরি দিয়ে যা ব্যবহারকারীর জন্য সুবিধাজনক?
ড্যান লেন্সকি

7
ঠিক আছে, আমার বলা উচিত ছিল: এই বিশেষ ক্ষেত্রে! মূল প্রশ্নটি ছিল "আমি কীভাবে একটি হেক্স স্ট্রিং রূপান্তর করব ..."। আপনি যদি এটি ব্যবহারকারীর কাছে রেখে যেতে চান তবে এটি একটি দরকারী বৈশিষ্ট্য থেকে তার চেয়ে আপনি সঠিক।
বাচসৌ

@ ড্যানলেন্সকি, এটি সর্বদা হেক্স স্ট্রিংকে ধনাত্মক সংখ্যায় রূপান্তর করে। আমি int("FFFF",16)-১ এ রূপান্তর করতে চাই ।
নজর

@ নাজার এটি একটি দীর্ঘ সময় হয়েছে, সুতরাং এই মুহুর্তে এটি সম্ভবত আপনার পক্ষে কার্যকর হবে না, তবে যে কেউ এখানে এসে হোঁচট খায়, যদি দুটির পরিপূরক নিয়ম প্রয়োগ করা প্রয়োজন হয়। এই উত্তরটি স্ট্যাকওভারফ্লো
জেরেমি

163

int(hexString, 16) কৌতুকটি করে এবং 0x উপসর্গের সাথে এবং ছাড়াও কাজ করে:

>>> int("a", 16)
10
>>> int("0xa",16)
10


43

হেক্স স্ট্রিংটি পাইথনে ইন-তে রূপান্তর করুন

আমি এটা "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

পাইথন সংখ্যাগুলি একটি সংখ্যাযুক্ত অক্ষর দিয়ে শুরু হয়, যখন পাইথনের নামগুলি একটি সংখ্যাযুক্ত অক্ষর দিয়ে শুরু করতে পারে না।


"পুনরায় লেটিং ইন্ট ইনফারার যদি না হয় তবে আপনি যদি বেস হিসাবে 0 পাস করেন তবে ইনট স্ট্রিংয়ের উপসর্গ থেকে বেসটিকে অনুমান করবে।" পাইথন ইন্টারপ্রেটার যেমন হেক্সাডেসিমাল বা দশমিক (বা বাইনারি) থেকে পূর্ণসংখ্যায় রূপান্তর করবেন।
gaoithe

13

উপরের ড্যানের উত্তরে যুক্ত করা: আপনি যদি একটি হেক্স স্ট্রিং সহ ইনট () ফাংশন সরবরাহ করেন তবে আপনাকে বেসটি 16 হিসাবে নির্দিষ্ট করতে হবে বা আপনি এটির কোনও বৈধ মান দিয়েছেন বলে ভাবেনা। স্ট্রের মধ্যে নেই এমন হেক্স সংখ্যাগুলির জন্য বেস 16 উল্লেখ করা অপ্রয়োজনীয়।

print int(0xdeadbeef) # valid

myHex = "0xdeadbeef"
print int(myHex) # invalid, raises ValueError
print int(myHex , 16) # valid

5

সবচেয়ে খারাপ উপায়:

>>> def hex_to_int(x):
    return eval("0x" + x)

>>> hex_to_int("c0ffee")
12648430

দয়া করে এটি করবেন না!

পাইথনে ইওল ব্যবহার করা কি খারাপ অভ্যাস?


3
এটি লক্ষ্য করার মতো evalবিষয় এটির সাথে অন্যান্য সমস্ত ইস্যুতে শীর্ষস্থানীয় abs
j6m8

4
যদি এটি একটি খারাপ ধারণা হয়, তবে এটি সামনে আনার কী লাভ?
পিপ্পারি

3
ভাল যুক্তি. আংশিক কারণ আমি মনে করি এটি মজার এবং আংশিক কারণ আমি এটি উত্পাদন কোড দেখেছি।
আন্দ্রে লাস্লোলো

আমার সম্ভবত লক্ষ্য করা উচিত যে আমি int(s,16)আমার রানটাইম ( int(hex(value),16) == int(value) >>> False) এর সাথে কিছু বড় সমস্যা সৃষ্টি করে, অনুচিত মানগুলি ফেরত দেওয়ার সমস্যাগুলির পরে অভিজ্ঞতাটি ব্যবহার করার পরে এটি করতাম । সরবরাহ করা স্ট্রিংটি eval()নিরাপদ ছিল এবং প্রত্যাবর্তিত মানটি যথাযথ ছিল।
টিসিএল

1
আমি এটি মজার এবং আলোকিত বলে মনে করি, এটি পোস্ট
করাতে

3

অথবা ast.literal_eval(এটি নিরাপদ, বিপরীতে eval):

ast.literal_eval("0xffff")

ডেমো:

>>> import ast
>>> ast.literal_eval("0xffff")
65535
>>> 

1

'% 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তাই না আপনার উত্তরটি আসলে কোনও স্ট্রিতে রূপান্তর করে, অন্যভাবে নয় (এটাই প্রশ্নটি যা প্রশ্ন)।
আন্দ্রে লাস্লোলো

আপনার ইনপুট জন্য ধন্যবাদ, আমি সম্মত যে আমার উত্তর সঠিক না, এবং এখন আমি এটি স্থির করেছি। তবে আমি বুঝতে পারি যে উত্তরের অংশটি উপরোক্তর মতো অপ্রয়োজনীয় অর্থাৎ ইন্ট (স্ট্রিং, বেস) ব্যবহার করে, তবে এখনও বাকি উত্তর পোস্টে আরও বিকল্প যুক্ত করে, আমি বিশ্বাস করি। রাজি?
সৌন্দরারাজন

প্রাসঙ্গিক না; এটি বেস 16 থেকে বেস 10 এ রূপান্তর করার কথা, অন্য উপায়ে নয়
পিপ্পারি

1

আপনি যদি পাইথন ইন্টারপ্রেটার ব্যবহার করে থাকেন তবে আপনি কেবল 0x (আপনার হেক্স মান) টাইপ করতে পারেন এবং দোভাষী আপনি এটি স্বয়ংক্রিয়ভাবে রূপান্তর করতে পারেন।

>>> 0xffff

65535

1

হেক্সস, অক্টাল, বাইনারি, ইনট এবং ফ্লোট পরিচালনা করে

স্ট্যান্ডার্ড উপসর্গ (উদাহরণস্বরূপ 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)

-1

পাইথন ২.7 এ, int('deadbeef',10) করে বলে মনে হচ্ছে না।

নিম্নলিখিতটি আমার পক্ষে কাজ করে:

>>a = int('deadbeef',16)
>>float(a)
3735928559.0

4
কিভাবে এই প্রশ্নের উত্তর দেয়?
পিপ্পারি

-5

'0x' উপসর্গ সহ, আপনি ইওল ফাংশনও ব্যবহার করতে পারেন

উদাহরণ স্বরূপ

>>a='0xff'
>>eval(a)
255

16
নিশ্চিত করুন যদি ইনভাল ব্যবহার করে ইনপুট বৈধতা সঠিকভাবে সম্পন্ন হয়েছে। আসলে, সম্ভবত আরও ভাল উপায় আছে। ইভাল ব্যবহার করবেন না।
ALOToverflow

7
খুব কমপক্ষে আপনার ব্যবহার করা উচিত ast.literal_eval
অ্যান্ডি হেডেন

2
খুব ধীর। সবচেয়ে খারাপ উপায়।
তানু শমূয়েল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.