比较两个十六进制数

Compare two hex numbers

我有一个函数可以用来逐个字符地比较两个字符串,并对其执行一些额外的任务。我想修改它来比较十六进制数。

例如:如果要比较A = "hello"B = "himan"。我曾经 运行 一个 for 循环并逐字符比较。效果很好。

for x, y in zip(A, B):
    if x == y:
        do something

如何修改它以考虑十六进制数字。例如,如果 A = "30303867"B = "3f160303",我想先将 303f 匹配,然后依此类推。正常情况下,我只能用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

如果我没理解错的话,你有两个字符串 AB,但你不想将这些字符串解释为字符,而是解释为十六进制数字对。但不考虑这些数字的整数值。这相当于比较字符对,因为它们是十六进制数字,所以您需要进行不区分大小写的比较,因为当被视为十六进制值时,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 中的整数可以任意大?