在Python中将整数转换为二进制字符串

807

如何在Python中将整数转换为二进制字符串?

37   →   '100101'

对于相反的方法,请参见纯字符串处理算法此处 - CopyPasteIt
36个回答

4

除非我误解了您所说的二进制字符串,否则我认为您要找的模块是结构体(struct)


1
新位置 - Alan

4
def binary(decimal) :
    otherBase = ""
    while decimal != 0 :
        otherBase  =  str(decimal % 2) + otherBase
        decimal    //=  2
    return otherBase

print binary(10)

输出:

1010


3

具备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

这是我刚刚实现的代码。虽然它不是一个方法,但你可以把它当做一个即插即用的函数使用!

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

2

计算数字的二进制:

print("Binary is {0:>08b}".format(16))

计算一个数字的十六进制表示:
print("Hexa Decimal is {0:>0x}".format(15))

计算从0到16的所有二进制数字:
for i in range(17):
   print("{0:>2}: binary is {0:>08b}".format(i))

计算十六进制数直到17

 for i in range(17):
    print("{0:>2}: Hexa Decimal is {0:>0x}".format(i))
##as 2 digit is enogh for hexa decimal representation of a number

2

这里是另一种使用常规数学的方法,没有循环,只有递归。(特殊情况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']

1
很奇怪的是,0 返回的是 '',应该是 '0'... - Andreas Magnusson

2

类似解决方案:

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
这里有一个简单的解决方案,使用divmod()函数来返回除法的余数和结果,不包括小数部分。
def dectobin(number):
    bin = ''
    while (number >= 1):
        number, rem = divmod(number, 2)
        bin = bin + str(rem)
    return bin

1
需要调试。调用 dectobin(10) 的结果是 '0101'。 - Nate

1

我认为Martijn Pieter的评论值得作为答案突出显示:

binary_string = format(value, '0{}b'.format(width))

对我来说,它既清晰又多才多艺。

1
我发现一种使用矩阵运算将十进制转换为二进制的方法。
import numpy as np
E_mat = np.tile(E,[1,M])
M_order = pow(2,(M-1-np.array(range(M)))).T
bindata = np.remainder(np.floor(E_mat /M_order).astype(np.int),2)

E是输入的十进制数据,M是二进制位数。 bindata是输出的二进制数据,格式为1 x M的二进制矩阵。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接