Python int в двоичную строку? - PullRequest
       165

Python int в двоичную строку?

425 голосов
/ 31 марта 2009

Существуют ли какие-либо стандартные методы Python для преобразования Integer (или Long) в двоичную строку в Python?

В Google существует множество функций dec2bin () ... Но я надеялся, что смогу использовать встроенную функцию / библиотеку.

Ответы [ 32 ]

4 голосов
/ 19 октября 2014

Еще одно решение с другим алгоритмом с использованием побитовых операторов.

def int2bin(val):
    res=''
    while val>0:
        res += str(val&1)
        val=val>>1     # val=val/2 
    return res[::-1]   # reverse the string

Более быстрая версия без перестановки строки.

def int2bin(val):
   res=''
   while val>0:
       res = chr((val&1) + 0x30) + res
       val=val>>1    
   return res 
4 голосов
/ 04 октября 2014
def binary(decimal) :
    otherBase = ""
    while decimal != 0 :
        otherBase  =  str(decimal % 2) + otherBase
        decimal    //=  2
    return otherBase

print binary(10)

выход:

1010

4 голосов
/ 31 марта 2009

Если я не понимаю, что вы подразумеваете под двоичной строкой, я думаю, что модуль, который вы ищете, это struct

3 голосов
/ 18 июля 2014

здесь простое решение с использованием функции divmod (), которая возвращает напоминание и результат деления без дроби.

def dectobin(number):
    bin = ''
    while (number >= 1):
        number, rem = divmod(number, 2)
        bin = bin + str(rem)
    return bin
3 голосов
/ 15 марта 2014

Вот код, который я только что реализовал. Это не метод , но вы можете использовать его как готовую к использованию функцию !

def inttobinary(number):
  if number == 0:
    return str(0)
  result =""
  while (number != 0):
      remainder = number%2
      number = number/2
      result += str(remainder)
  return result[::-1] # to invert the string
3 голосов
/ 18 декабря 2018

Для тех из нас, кому необходимо преобразовать целые числа со знаком (диапазон -2 ** (цифры-1) в 2 ** (цифры-1) -1), в двоичные строки, дополняющие 2, это работает:

def int2bin(integer, digits):
if integer >= 0:
    return bin(integer)[2:].zfill(digits)
else:
    return bin(2**digits + integer)[2:]

Это производит:

>>> int2bin(10, 8)
'00001010'
>>> int2bin(-10, 8)
'11110110'
>>> int2bin(-128, 8)
'10000000'
>>> int2bin(127, 8)
'01111111'
3 голосов
/ 29 августа 2017

Калькулятор со всеми необходимыми функциями для DEC, BIN, HEX: (сделано и протестировано с Python 3.5)

Вы можете изменить входные тестовые числа и получить преобразованные.

# CONVERTER: DEC / BIN / HEX

def dec2bin(d):
    # dec -> bin
    b = bin(d)
    return b

def dec2hex(d):
    # dec -> hex
    h = hex(d)
    return h

def bin2dec(b):
    # bin -> dec
    bin_numb="{0:b}".format(b)
    d = eval(bin_numb)
    return d,bin_numb

def bin2hex(b):
    # bin -> hex
    h = hex(b)
    return h

def hex2dec(h):
    # hex -> dec
    d = int(h)
    return d

def hex2bin(h):
    # hex -> bin
    b = bin(h)
    return b


## TESTING NUMBERS
numb_dec = 99
numb_bin = 0b0111 
numb_hex = 0xFF


## CALCULATIONS
res_dec2bin = dec2bin(numb_dec)
res_dec2hex = dec2hex(numb_dec)

res_bin2dec,bin_numb = bin2dec(numb_bin)
res_bin2hex = bin2hex(numb_bin)

res_hex2dec = hex2dec(numb_hex)
res_hex2bin = hex2bin(numb_hex)



## PRINTING
print('------- DECIMAL to BIN / HEX -------\n')
print('decimal:',numb_dec,'\nbin:    ',res_dec2bin,'\nhex:    ',res_dec2hex,'\n')

print('------- BINARY to DEC / HEX -------\n')
print('binary: ',bin_numb,'\ndec:    ',numb_bin,'\nhex:    ',res_bin2hex,'\n')

print('----- HEXADECIMAL to BIN / HEX -----\n')
print('hexadec:',hex(numb_hex),'\nbin:    ',res_hex2bin,'\ndec:    ',res_hex2dec,'\n')
3 голосов
/ 29 ноября 2014
n=input()
print(bin(n).replace("0b", ""))
2 голосов
/ 26 апреля 2014

Несколько похожее решение

def to_bin(dec):
    flag = True
    bin_str = ''
    while flag:
        remainder = dec % 2
        quotient = dec / 2
        if quotient == 0:
            flag = False
        bin_str += str(remainder)
        dec = quotient
    bin_str = bin_str[::-1] # reverse the string
    return bin_str 
2 голосов
/ 23 октября 2015

Вот еще один способ использования обычной математики, без циклов, только рекурсия. (Тривиальный случай 0 ничего не возвращает).

def toBin(num):
  if num == 0:
    return ""
  return toBin(num//2) + str(num%2)

print ([(toBin(i)) for i in range(10)])

['', '1', '10', '11', '100', '101', '110', '111', '1000', '1001']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...