简短的背景故事:
我目前正在开发一个用Python编写的密钥序列号(KSN)转换器。它使用我编写的tkinter框架来输入要转换的值。基本上,在框中输入一个序列号,按convert,输出KSN。超级简单而且很有效。然而,我最近收到的序列号正在变成字母数字,我的转换器不支持
问题:
我需要能够获取列表中的序列号,包括数字和字母数字,将字母数字值更改为十六进制,并能够将列表中的每个值计算为二进制值。但是在计算时,我收到
ValueError: invalid literal for int() with base 10: (hex value)
我已经在google上搜索了一个解决方案,我也检查了关于堆栈溢出的其他答案,但它们似乎没有提供我正在寻找的解决方案。我试着做一个函数来转换数据,我试着把进程分解成更多的进程来查看断点,但一切都归结为,我的十六进制值被认为是一个字符串。我知道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'
第一阶段变量应返回序列号框中的列表,如下所示:
['201805138', '0x239487d9298L', '201805138', '0x239487d9298L']
stage2需要将列表值返回为:
['0b1100000001110100110101010010', '0b100011100101001000011111011001001010011000', '0b1100000001110100110101010010', '0b100011100101001000011111011001001010011000']
不能对包含更多的字符串使用
int(..., 16)
,而不仅仅是十六进制数字(0-9,a-f)和可选的0x
前缀。输入字符串后面有一个L
(对于长整数)需要删除后面的
L
:如果您不能阻止输入有时包含一个尾随的
L
,只需使用str.rstrip('L')
来删除它们就我个人而言,我会将所有数据都保留为整数,并且只在需要显示时将这些整数值格式化为字符串(二进制或十六进制或其他形式)
这将从10进制和16进制字符串的混合中生成整数值列表:
相关问题 更多 >
编程相关推荐