Python 比较两个十六进制数
我有一个函数,我使用它逐个字符比较两个字符串,并对其执行一些附加任务。我想修改它来比较十六进制数 例如:如果要比较Python 比较两个十六进制数,python,hex,string-comparison,Python,Hex,String Comparison,我有一个函数,我使用它逐个字符比较两个字符串,并对其执行一些附加任务。我想修改它来比较十六进制数 例如:如果要比较A=“hello”,B=“himan”。我曾经为循环运行,并逐个字符进行比较。它工作得很好 for x, y in zip(A, B): if x == y: do something 我如何修改它来考虑十六进制数。例如,如果A=“30303867”和B=“3f160303”,我想首先将30与3f匹配,依此类推。通常,我只能通过3等匹配3。 感谢要将Pyth
A=“hello”
,B=“himan”
。我曾经为循环运行,并逐个字符进行比较。它工作得很好
for x, y in zip(A, B):
if x == y:
do something
<>我如何修改它来考虑十六进制数。例如,如果A=“30303867”
和B=“3f160303”
,我想首先将30
与3f
匹配,依此类推。通常,我只能通过3
等匹配3
。
感谢要将Python中整数的十六进制数字作为字符串,可以使用'{:x}'。format(number)
。格式说明符中的:x
表示十六进制格式中的(不带0x)
然后可以使用十六进制表示的字符串代码
(旁注:这也可以使用printf样式的格式%x
)因为您不想转换为整数,所以最简单的方法是一次迭代两个字符串
for i in range(0, min(len(A),len(B)), 2):
if A[i:i+2] == B[i:i+2]:
# Do Something
如果我理解正确,您有两个字符串A
和B
,但您不想将这些字符串解释为字符,而是十六进制数字对。但不考虑这些数字的整数值。这相当于比较字符对,因为它们是十六进制数字,所以需要进行不区分大小写的比较,因为当视为十六进制值时,1F和1F是相等的
这会将字符串拆分为成对的字符:
def digit_pairs(s):
return [s[i:i+2].lower() for i in range(0,len(s),2)]
然后你就可以做了
for a, b in zip(digit_pairs(A),digit_pairs(B)):
if a == b:
do something
不过,我不明白你反对转换成整数。您知道Python中的整数可以任意大吗 我宁愿不要将输入转换为整数。这在我的例子中并不总是可能的。如果这些值是十六进制字符串,int(hex\u string,16)
将起作用。可以在davideej找到进一步的解释,我可以知道原因吗?如果无法将它们转换为int
,那么问题与比较hex
值无关,而只是比较字符串。@machnic我需要一个通用解决方案,因为输入也可以是字符串。您必须确保a
是两个字符串中最小的一个。最好使用min(len(A),len(B))
作为停止值。为了进行健全性检查,如果字符串不相等,最好抛出错误,说“字符串不相等,无法完全比较”
谢谢。这与我所追求的非常接近。关于整数,对于输入不能转换为整数的情况,我不希望转换为更通用的解决方案。