python - 需要将列表中的十六进制值视为 int 以使用 bin() 进行计算。我错过了什么?
问题描述
简短的背景故事:
我目前正在研究用 Python 编写的密钥序列号 (KSN) 转换器。它使用我编写的 tkinter 框架来输入要转换的值。基本上,在盒子里放一个序列号,按转换,输出KSN。超级简单而且有效。但是,我最近收到的序列号变成了字母数字,我的转换器不支持。
问题:
我需要能够在列表中获取数字和字母数字的序列号,将字母数字值更改为十六进制,并能够将列表中的每个值计算为二进制值。但是在计算时,我收到
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']
解决方案
您不能int(..., 16)
在包含多于十六进制数字(0-9、af)和可选前缀的字符串上使用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')
删除它们。
就个人而言,我会将所有数据保留为整数,并且仅在需要时将这些整数值格式化为字符串(二进制或十六进制或其他)以用于显示目的。
这会从 base-10 和 base-16 字符串的混合中生成一个整数值列表:
int_values = [int(v.rstrip('L'), 16 if v[:2] == '0x' else 10) for v in serial_box]
推荐阅读
- node.js - NodeJS:使用 NoSQL 数据库处理事务?
- javascript - 为什么 Sharepoint 在执行 javascript 函数后会自行刷新?
- java - “&sub”的 esapi 验证器正则表达式问题
- django - 如何在 Django 中为 TabularInline 管理表单集创建自定义模板?
- php - MYBB 警告 [2] count():参数必须是数组或实现 Countable 的对象 - 行:906
- c# - 在 C# 中使用多个签名验证签名的 XML
- visual-studio - Visual Studio 2015 中的查找和替换不将所选字符串作为默认值
- asp.net-mvc - ASP.NET 应用程序 - 限制 Microsoft 身份验证订阅者
- html - 图像无法在移动视图上正确显示
- postgresql - 如何在 EXCLUDE 约束中将 uuid 与 postgresql gist 一起使用