Python 将base-2二进制数字字符串转换为int

Python 将base-2二进制数字字符串转换为int,python,Python,我只想将一个base-2二进制数字符串转换为int,类似这样: >>> '11111111'.fromBinaryToInt() 255 在Python中有没有实现这一点的方法 使用内置的int()函数,并将输入数的基数传递给它,即二进制数的2: >>> int('11111111', 2) 255 以下是和的文档。另一种方法是使用模块: 请注意,无符号整数与有符号整数不同: >>> b.int -1 位字符串模块不是必需的,但它有许多

我只想将一个base-2二进制数字符串转换为int,类似这样:

>>> '11111111'.fromBinaryToInt()
255

在Python中有没有实现这一点的方法

使用内置的
int()
函数,并将输入数的基数传递给它,即二进制数的
2

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

以下是和的文档。

另一种方法是使用模块:

请注意,无符号整数与有符号整数不同:

>>> b.int
-1

位字符串
模块不是必需的,但它有许多性能良好的方法,可以将输入转换为或从位转换为其他形式,以及对它们进行操作。

使用int和base是正确的方法。在我发现int也取base之前,我经常这样做。它基本上是一个reduce,用于理解将二进制转换为十进制的原始方式(例如110=2**0*0+2**1*1+2**2*1)


只需在python交互界面中键入0b11111111

>>> 0b11111111
    255

如果你想知道幕后发生了什么,那就来吧

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')

递归Python实现:

def int2bin(n):
    return int2bin(n >> 1) + [n & 1] if n > 1 else [1] 
如果您使用的是python3.6或更高版本,则可以使用f-string执行以下操作: 转换:

二进制到十进制:

>>> 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
注意用冒号分隔的两条信息

通过这种方式,您可以通过更改冒号[:]的右侧,将{二进制、八进制、十六进制、十进制}转换为{二进制、八进制、十六进制、十进制}

:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal 
:#0 -> converts to decimal as above example
尝试将冒号的左侧改为八进制/十六进制/十进制。

对于大型矩阵(10**5行及以上),最好使用矢量化matmult。在一次射门中通过所有行和列。速度非常快。python中没有循环。我最初设计它是为了将MovieLens中10个不同类型的列的0/1等二进制列转换为每个示例行的单个整数

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

对于在基本Python 3中来回移动的记录:

a=10
垃圾箱(a)
#'0b1010'
内部(银行标识代码(a),2)
# 10
评估(垃圾箱(a))
# 10

谢谢,这正是我要找的。如果有人在找相反的:
bin(255)
->
'0b11111111'
。有关更多详细信息,请参阅。应注意,这仅适用于无符号二进制整数。对于有符号整数,转换选项非常混乱。如何在python 3中实现这一点?请注意,在交互式REPL会话中(如
>
提示符所建议的),您根本不需要使用
打印。OP的假设例子没有。因此,在Python 2和Python 3中应该是相同的。虽然这并不重要,但二进制字符串通常意味着包含实际二进制数据的字符串(一个字节包含两个十六进制数字,即“\x00”是空字节)。只需提一下:另一种方式类似于“{0:08b}”。格式(65)(或f'{65:08b}”)。不是定义
add=lambda x,y:x+y
,而是提供
int.\uuuuu add\uuuu
,以减少。例如,
reduce(int.\uuuuu add\uuuuuuuu…)
:#b -> converts to binary
:#o -> converts to octal
:#x -> converts to hexadecimal 
:#0 -> converts to decimal as above example
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