gpt4 book ai didi

python - 将二进制转换为十进制时如何避免无效 token

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:19 25 4
gpt4 key购买 nike

我知道有一个内置函数可以将二进制转换为十进制,但我想我应该挑战自己并制作自己的函数。

代码如下:

def binaryToDecimal(binary):
binaryList = list(str(binary))
exponent = len(binaryList) - 1
decimal = 0

for char in binaryList:
bit = int(char)
decimal += bit * (2 ** exponent)
exponent -= 1

print(decimal)

问题是,我知道如果我想以 0 开始我的二进制文件,我必须使用 0b 前缀来避免无效的标记,但这会给我带来一个问题。它不会转换左侧的最后 1

binaryToDecimal(0b010001110)

所以它输出 14 而不是 142

我该如何解决这个问题?还有一种方法我可以直接说

binaryToDecimal(010001110) 

不使用 0b 前缀就不会获得无效 token ?

我使用的是 Python 3.5

最佳答案

0b010001110已经是一个十进制值为 142 的整数。如果您确实想要执行自己的二进制转换函数,则需要将二进制参数传递给作为字符串,例如“010001110”,或作为位列表,可以是字符串、整数,甚至可以是 bool 值 TrueFalse

解决了 strint 输入问题后,就有了一种更简单的方法来进行转换。无需搞乱指数:在循环中,只需将当前结果向左移动一位并插入下一位即可。像这样:

def bin_to_int(bits):
result = 0
for b in bits:
result = (result << 1) | int(b)
return result

# Test
data = [
'0',
'1',
'110',
'001101',
'10001110',
'000010001110',
'11000000111001',
]

for bits in data:
print(bits, int(bits, 2), bin_to_int(bits))

输出

0 0 0
1 1 1
110 6 6
001101 13 13
10001110 142 142
000010001110 142 142
11000000111001 12345 12345

我的测试代码也使用内置的 int 构造函数进行转换,以验证我的 bin_to_int 函数是否正确执行。

这一行完成了大部分工作,使用按位运算符,

result = (result << 1) | int(b)

但是如果您愿意,您可以使用“普通”算术运算符来实现它

result = result * 2 + int(b)

关于python - 将二进制转换为十进制时如何避免无效 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39748689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com