বেস -২ বাইনারি সংখ্যা স্ট্রিংকে ইনটে রূপান্তর করুন


306

আমি কেবল একটি বেস -২ বাইনারি সংখ্যার স্ট্রিংকে একটি প্রান্তে রূপান্তর করতে চাই, এরকম কিছু:

>>> '11111111'.fromBinaryToInt()
255

পাইথনে এটি করার কোনও উপায় আছে?


3
যদিও এটি আসলে কোনও ব্যাপার নয়, একটি বাইনারি স্ট্রিংয়ের অর্থ সাধারণত স্ট্রিং থাকে আসল বাইনারি ডেটা (একটি বাইটে দুটি হেক্সাডেসিমাল ডিজিট থাকে, যেমন "\ x00" একটি নাল বাইট)।
ট্রেভরকির্কবি

উত্তর:


562

আপনি অন্তর্নির্মিত intফাংশনটি ব্যবহার করুন এবং এটি ইনপুট নম্বরটির বেসটি পাস করুন, যেমন 2বাইনারি সংখ্যার জন্য:

>>> int('11111111', 2)
255

এখানে জন্য ডকুমেন্টেশন python2 জন্য, এবং python3


60
ক্ষেত্রে কেউ বিপরীতে খুঁজছেন: bin(255)-> '0b11111111'। অতিরিক্ত বিশদের জন্য এই উত্তরটি দেখুন ।
আকসেলি পালান

7
এটি লক্ষ করা উচিত যে এটি কেবল স্বাক্ষরযুক্ত বাইনারি পূর্ণসংখ্যার জন্য কাজ করে। স্বাক্ষরিত পূর্ণসংখ্যার জন্য, রূপান্তর বিকল্পগুলি একটি জগাখিচুড়ি।
ভুয়া নাম

2
অজগর 3 এ এটি কীভাবে করবেন?
সরস আর্য

2
@ সরসআর্যা এটি খুব মিল! :) আমি আপডেট, উপরে দেখুন।
বিনোদন

1
এবং দ্রষ্টব্য যে একটি ইন্টারেক্টিভ REPL অধিবেশনে ( >>>প্রম্পট দ্বারা প্রস্তাবিত হিসাবে ), আপনার মোটেও ব্যবহার printকরার দরকার নেই । ওপির অনুমানমূলক উদাহরণটি তা করেনি। তাই এটি পাইথন 2 এবং 3 এ সত্যই অভিন্ন হওয়া উচিত
জন ওয়াই

37

পাইথন ইন্টারেক্টিভ ইন্টারফেসে কেবল 0b11111111 টাইপ করুন:

>>> 0b11111111
    255

28

এটি করার আরেকটি উপায় হ'ল bitstringমডিউলটি ব্যবহার করে :

>>> from bitstring import BitArray
>>> b = BitArray(bin='11111111')
>>> b.uint
255

নোট করুন যে স্বাক্ষরযুক্ত পূর্ণসংখ্যাটি স্বাক্ষরিত পূর্ণসংখ্যার থেকে পৃথক:

>>> b.int
-1

bitstringমডিউল প্রয়োজন হয় না, কিন্তু এটি অন্যান্য ফর্মগুলিতে মধ্যে এবং বিট থেকে ইনপুট বাঁক, সেইসাথে তাদের সাধিত জন্য performant পদ্ধতি প্রচুর হয়েছে।


8

বেস সহ ইন্ট ব্যবহার করা সঠিক পথে। আমি int ব্যবহারের আগেও এটি ব্যবহার করতাম base এটি মূলত বাইনারিকে দশমিক হিসাবে রূপান্তর করার প্রাথমিক উপায়ের তালিকা বোধের জন্য প্রয়োগ হ্রাস (উদাহরণস্বরূপ 110 = 2 ** 0 * 0 + 2 ** 1 * 1 + 2 ** 2 * 1)

add = lambda x,y : x + y
reduce(add, [int(x) * 2 ** y for x, y in zip(list(binstr), range(len(binstr) - 1, -1, -1))])

4
সংজ্ঞায়নের পরিবর্তে add = lambda x, y: x + y, int.__add__হ্রাস করার জন্য সরবরাহ করা যেতে পারে। যেমনreduce(int.__add__, ...)
জর্ডন Jambazov

4

যদি আপনি জানতে চান যে পর্দার আড়ালে কী ঘটছে তবে আপনি এখানে যান।

class Binary():
def __init__(self, binNumber):
    self._binNumber = binNumber
    self._binNumber = self._binNumber[::-1]
    self._binNumber = list(self._binNumber)
    self._x = [1]
    self._count = 1
    self._change = 2
    self._amount = 0
    print(self._ToNumber(self._binNumber))
def _ToNumber(self, number):
    self._number = number
    for i in range (1, len (self._number)):
        self._total = self._count * self._change
        self._count = self._total
        self._x.append(self._count)
    self._deep = zip(self._number, self._x)
    for self._k, self._v in self._deep:
        if self._k == '1':
            self._amount += self._v
    return self._amount
mo = Binary('101111110')


1

আপনি যদি পাইথন 3.6 ব্যবহার করেন বা তারপরে আপনি রূপান্তরটি করতে এফ স্ট্রিং ব্যবহার করতে পারেন:

বাইনারি থেকে দশমিক:

>>> print(f'{0b1011010:#0}')
90

>>> bin_2_decimal = int(f'{0b1011010:#0}')
>>> bin_2_decimal
90

অষ্টাল হেক্সা এবং বাইনারি থেকে শুরু করে

>>> f'{0b1011010:#o}'
'0o132'  # octal

>>> f'{0b1011010:#x}'
'0x5a'   # hexadecimal

>>> f'{0b1011010:#0}'
'90'     # decimal

কোলন দ্বারা পৃথক করা 2 টুকরা তথ্যের প্রতি মনোযোগ দিন।

এইভাবে, আপনি কোলনের ডান দিকটি পরিবর্তন করে {বাইনারি, অষ্টাল, হেক্সাডেসিমাল, দশমিক} থেকে inary বাইনারি, অক্টাল, হেক্সাডেসিমাল, দশমিক between এর মধ্যে রূপান্তর করতে পারেন [:]

:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal 
:#0 -> converts to decimal as above example

অষ্টাল / হেক্সাডেসিমাল / দশমিকের জন্য কোলনের বাম দিক পরিবর্তন করার চেষ্টা করুন।


0

বড় ম্যাট্রিক্সের জন্য (10 ** 5 টি সারি এবং তার বেশি) ভেক্টরাইজড ম্যাটমল্ট ব্যবহার করা ভাল। একটি শটে সমস্ত সারি এবং কলগুলিতে পাস করুন। এটি অত্যন্ত দ্রুত। এখানে অজগরটিতে কোনও লুপিং নেই। আমি মূলত এটিকে বিভিন্ন বাইনারি কলামগুলিকে মুভিলেন্সে 10 টি বিভিন্ন জেনার কলামের মতো মুভিলেন্সে প্রতিটি উদাহরণ সারিটির জন্য একক পূর্ণসংখ্যায় রূপান্তর করার জন্য ডিজাইন করেছি।

def BitsToIntAFast(bits):
  m,n = bits.shape
  a = 2**np.arange(n)[::-1]  # -1 reverses array of powers of 2 of same length as bits
  return bits @ a
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.