比较两个十六进制数字

时间:2018-08-01 13:41:35

标签: python hex string-comparison

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

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

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

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

3 个答案:

答案 0 :(得分:0)

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

然后,您可以将字符串代码与十六进制表示形式一起使用。

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

如果我对您的理解正确,那么您有两个字符串import pandas as pd, numpy as np df = pd.DataFrame({'x': [1, 2, np.nan, np.nan], 'y': [np.nan, np.nan, 4, 8]}) arr = df.values df['xy'] = arr[~np.isnan(arr)].astype(int) print(df) x y xy 0 1.0 NaN 1 1 2.0 NaN 2 2 NaN 4.0 4 3 NaN 8.0 8 A,但是您不想将这些字符串解释为字符,而是一对十六进制数字。但不考虑这些数字的整数值。这相当于比较字符对,因为它们是十六进制数字,所以您需要进行不区分大小写的比较,因为当被视为十六进制值时,1F和1f相等。

这会将您的字符串拆分为成对的字符:

B

然后您可以

def digit_pairs(s):
    return [s[i:i+2].lower() for i in range(0,len(s),2)]

不过,我不明白您反对转换为整数。您是否知道Python中的整数可以任意大?