十六进制字符串压缩程序

2024-09-30 02:17:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建了一个程序来用Python压缩“mac number”。 在这里,我试图根据这个规则来收缩连续的零。 但我在将“string”的最后一个索引作为最后一个字段时遇到了一些问题 如果最后一个字段有“0000”;它无法得到我所想的答案。 它在最后一个字段中给出两次答案,中间有双冒号(::)。 请帮我解决这个问题

这是我的编码部分:

hex_num = 'fe80:0d5e:0d2f:f180:f542:0d5e:00f0:f45d:3d5e:0000'

first_list = []
second_list = []

dec_value = ([(int(i,16)) for i in hex_num.split(":")])
print('list :',dec_value)

for i in range(len(dec_value) - 1):
    if dec_value[i] == 0:
        if dec_value[i] + dec_value[i + 1] == 0:
            ## print(dec_value[i], dec_value[i + 1])
            pass

        if dec_value[i + 1] != 0:
            p = dec_value.index(dec_value[i + 1])
            break        
    else:        
        ## print(dec_value[i], dec_value[i + 1])
        p = dec_value.index(dec_value[i])
        first_list.append(dec_value[i])

for h in range(p, len(dec_value) - 1):
    second_list.append(dec_value[h])

non_leading_zeros1 = ":".join([str(hex(h).replace("0x",'')) for h in first_list])
non_leading_zeros2 = ":".join([str(hex(h).replace("0x",'')) for h in second_list])

print(non_leading_zeros1 +'::'+ non_leading_zeros2)

输出:fe80:d5e:d2f:f180:f542:d5e:f0:f45d:3d5e::3d5e

根据mac号码或ipv6号码压缩规则,这是错误的

预期值:fe80:d5e:d2f:f180:f542:d5e:f0:f45d:3d5e::


Tags: inforvaluedeclistfirstprinthex

热门问题