【问题标题】:Compare two hex numbers比较两个十六进制数
【发布时间】:2018-08-01 13:41:35
【问题描述】:

我有一个函数用于逐个字符地比较两个字符串并对其执行一些附加任务。我想修改它来比较十六进制数字。

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

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

如何修改它以考虑十六进制数字。例如,如果A = "30303867"B = "3f160303",我想先匹配303f,然后以此类推。通常,我只能通过3 匹配3 等等。 谢谢

【问题讨论】:

  • 我宁愿不将我的输入转换为整数。就我而言,这并不总是可能的。
  • 如果这些值是十六进制字符串,int(hex_string, 16) 将起作用。进一步的解释可以找到here
  • @davideej 我可以知道为什么吗?如果无法将它们转换为int,那么问题与比较hex 值无关,而只是比较字符串。
  • @machnic 我想要一个通用的解决方案,因为输入也可以是字符串。

标签: python hex string-comparison


【解决方案1】:

如果我理解正确,您有两个字符串 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 中的整数可以任意大吗?

【讨论】:

  • 谢谢。这与我所追求的非常接近。关于整数,对于无法将输入转换为整数的情况,我不喜欢转换以获得更通用的解决方案。
【解决方案2】:

要在 Python 中将整数的十六进制数字作为字符串,您可以使用 '{:x}'.format(number)。格式说明符中的:x 表示十六进制格式(不带0x)。

那么就可以使用十六进制表示的字符串代码了。

(旁注:这也可以使用 printf 样式的格式 %x

【讨论】:

    【解决方案3】:

    由于您不想转换为整数,因此您可以做的最简单的事情是一次遍历每个字符串两个。

    for i in range(0, min(len(A),len(B)), 2):
         if A[i:i+2] == B[i:i+2]:
             # Do Something
    

    【讨论】:

    • 您必须确保A 是两个字符串中最小的一个。最好使用min(len(A), len(B)) 作为停止值。
    • 对于健全性检查,如果字符串不相等,最好抛出错误说"unequal strings, can't be compared completely"
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多