gpt4 book ai didi

python - 需要将列表中的十六进制值视为 int 才能使用 bin() 进行计算。我缺少什么?

转载 作者:太空宇宙 更新时间:2023-11-03 21:02:44 24 4
gpt4 key购买 nike

简短的背景故事:

我目前正在开发一个用 Python 编写的 key 序列号 (KSN) 转换器。它使用我编写的 tkinter 框架来输入要转换的值。基本上,在框中输入序列号,按转换,输出 KSN。 super 简单而且有效。但是,我最近收到的序列号正在变成字母数字,我的转换器不支持。

问题:

我需要能够获取列表中的序列号(数字和字母数字),将字母数字值更改为十六进制,并能够将列表中的每个值计算为二进制值。但是在计算时,我收到

ValueError: invalid literal for int() with base 10: (hex value)

我已经尝试过谷歌搜索解决方案,并且我检查了有关堆栈溢出的其他答案,但它们似乎没有提供我正在寻找的解决方案。我尝试过创建一个函数来转换数据,我尝试将进程分解为更冗长的进程以查看断点,但一切都归结为,我的十六进制值被视为字符串。我知道 bin() 可以计算类似 0x123abc 的内容,但它显然不会采用 '0x123abc' 这就是问题所在。

serial_box = ['201805138', '239487D9298', '201805138', '239487D9298']

stage = [hex(int(x, 16)) if x.isdigit() is False else x for x in serial_box]
stage2 = [bin(int(x.strip())) for x in stage]

print stage
print stage2

输出:

    stage2 = [bin(int(x.strip())) for x in stage]
ValueError: invalid literal for int() with base 10: '0x239487d9298L'

第一阶段变量应将serial_box中的列表返回为:

['201805138', '0x239487d9298L', '201805138', '0x239487d9298L']

stage2 需要返回列表值:

['0b1100000001110100110101010010', '0b100011100101001000011111011001001010011000', '0b1100000001110100110101010010', '0b100011100101001000011111011001001010011000']

最佳答案

您不能在仅包含十六进制数字(0-9、a-f)的字符串上使用 int(..., 16),并且可选的 0x 前缀。您的输入字符串尾部有一个 L(表示长整数)。

需要删除尾随的L:

>>> int('0x239487d9298L', 16)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 16: '0x239487d9298L'
>>> int('0x239487d9298', 16)
2445052580504

如果您无法防止输入有时包含尾随 L,只需使用 str.rstrip('L') 删除它们即可。

就我个人而言,我会将所有数据保留为整数,并且仅在需要显示时将这些整数值格式化为字符串(二进制或十六进制或其他形式)。

这会从 10 进制和 16 进制字符串的混合中生成一个整数值列表:

int_values = [int(v.rstrip('L'), 16 if v[:2] == '0x' else 10) for v in serial_box]

关于python - 需要将列表中的十六进制值视为 int 才能使用 bin() 进行计算。我缺少什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55620348/

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