当前位置: 首页 > 知识库问答 >
问题:

接受表示十进制数的字符串并以二进制格式返回的函数

魏成济
2023-03-14

我试图让一个函数采取一个字符串dec,代表一个十进制数,例如"11",我想说的函数返回一个字符串,其中包含相应的二进制格式,在这种情况下"1011"。这就是我到目前为止所拥有的:

def dec2bin(dec):

    dec = str("11")

    if dec > 1:
        binary(dec//2)
    return (dec % 2,end = "")

我对Python非常陌生,所以我不确定如何首先将一个数字变成一个字符串(使用str()),以及如何使它返回相应的二进制值。谁能给我指出正确的方向?

共有3个答案

勾炜
2023-03-14

假设您可以使用int将字符串转换为整数:

def dec2bin(snum):
    n = int(snum)
    bin_s = ['1' if (n >> b) & 1 else '0' for b in range(n.bit_length())]
    return ''.join(reversed(bin_s))

我们来测试一下

>>> dec2bin('11')
'1011'

基本上,它扫描从字符串中获得的整数并检查其中的每一位。

它将数字移到右边,检查最低有效位,并将其与值1(或者,我们可以将掩码移到左边,保持数字不变)。

每个位检查的结果用于填充一个列表,然后将该列表反转并合并以形成一个字符串。

如果使用列表理解会让你看起来太酷而不真实,请使用for循环:

def dec2bin(snum):
    n = int(snum)
    bin_s = []
    for b in range(n.bit_length()):
        cur_bit = (n >> b) & 1
        sbit = chr(ord('0') + cur_bit)
        bin_s.append(sbit)
    return ''.join(reversed(bin_s))

如果可以使用python的内置format函数,另一个解决方案是:

def dec2bin(snum):
    return format(int(snum),"b")

进一步说明算法(主要假设是我们只讨论无符号整数):

计算机使用二进制表示数据(即位、零和一)。一个接一个,从右到左,它们以2的升幂形成一个数字,就像十进制数字一样。

例如,数字13(13是以10为基数的表示形式:1*10^1 3*10^0)以二进制(1*2^3 1*2^2 0*2^1 1*2^0)形式写入1101,并作为字节内的位(8位)存储在内存中。

LSB(最低有效位)是功率最小的位(二进制数字),即1101中最右边的一位,因为它在2的幂次方面重量最小。

Python允许整数的大小可变,这就是为什么我使用bit\u length方法来确定存储该数字需要多少位。其他语言(如C)为数字分配预定义的大小,通常与CPU提供的寄存器宽度相同(或更小)。

欧盛
2023-03-14

以下工作将起作用:

def dec2bin(dec):
    return format(int(dec), "b")

您可以这样测试它:

print dec2bin("11")
宰父疏珂
2023-03-14

这应该起作用:

def dec2bin(num):
    return bin(int(num))[2:]

int将字符串num转换为整数。bin将其转换为二进制表示(再次为字符串)。[2:]删除前两个字符,这只是二进制表示的指示符。

 类似资料:
  • 我正在使用DecimalFormats将双打格式化为字符串。然后这个字符串被集成到我的表示层中。 问题:我想保留所有的小数。示例:“12345678.123456789” 格式:#.#- 我可以用##########对于大小数点,但是如果小数点更长呢? 我发现我的小测试程序很有用,想和大家分享。 你能帮我显示所有小数吗? 这导致: 编辑:一位用户提到了一个相关的问题:如何很好地将浮点数格式化为字符

  • 如何转换“大”十六进制数(字符串格式): EC 851 A 69 B 8 ACD 843164 E 10 CFF 70 CF 9 E 86 DC 2 FEE 3 CF 6 F 374 B 43 C 854 E 3342 A 2 F 1 AC 3 E 30 C 741 CC 41 E 679 DF 6 D 07 CE 6 FA 3 A 66083 EC 9 B 8 C 8 BF 3 AF 05 D

  • 问题内容: 我想将十六进制字符串转换为二进制字符串。例如,十六进制2是0010。下面是代码: 但是,这仅适用于十六进制0-9;它不适用于十六进制A-F,因为它使用。谁能增强它? 问题答案: 您需要告诉Java int是十六进制的,如下所示:

  • 问题内容: 我需要从随机整数(0-255)列表中创建一个十六进制数字字符串。每个十六进制数字应由两个字符表示:5-“ 05”,16-“ 10”等。 例: 我设法提出了: 但是,这看起来有点尴尬。有没有更简单的方法? 问题答案:

  • 问题内容: 我发现将十六进制转换为二进制的方式如下: 尽管此方法适用于较小的十六进制数,但以下十六进制数 抛出一个 因此,我编写了以下似乎可行的方法: 上面的方法基本上接受十六进制字符串中的每个字符,并在必要时将其转换为等价的二进制零,然后将其连接到返回值。这是执行转换的正确方法吗?还是我忽略了一些可能导致我的方法失败的事情? 在此先感谢您的协助。 问题答案: 会做你想要的。只需传递2的基数即可。

  • 问题内容: 我需要将二进制字符串转换为十六进制字符串,但是我有问题。我通过这种方法将二进制字符串转换为十六进制字符串: 没关系!但是我丢失了字符串左侧的零。例如: 该方法返回此:123456789ABCDEF,但我想返回此: 00000123456789ABCDEF 问题答案: 而不是我将使用解析值,然后以所需的宽度(在您的示例中为21)输出值: