Python中列表元素转CRC8哈希值遇错误,求正确实现方案
修正Python crc8库处理列表元素生成指定格式CRC8哈希值的代码
原代码存在的问题
- 列表定义语法错误:
b["ya123",...]写法非法,字节串前缀b仅能修饰单个字符串,无法直接作用于列表 - 错误的断言逻辑:硬编码断言所有元素的CRC8结果为
'c0',但每个元素的哈希值不同,会直接触发断言失败 - 未实现结果收集:没有将每个元素的哈希值整理为期望的
["0x66","0xBF","0x1A"]格式
修正后的代码
import crc8 # 正确定义输入列表,将每个字符串转为字节串 input_list = [b"ya123", b"hello123", b"nihao123"] # 若原始列表是普通字符串,可改用此写法: # input_list = ["ya123", "hello123", "nihao123"] crc_results = [] for item in input_list: hash_obj = crc8.crc8() # 若item是普通字符串,替换为 hash_obj.update(item.encode('utf-8')) hash_obj.update(item) # 将十六进制结果格式化为0xXX的大写形式 formatted_crc = f"0x{hash_obj.hexdigest().upper()}" crc_results.append(formatted_crc) print(crc_results) # 输出结果:['0x66', '0xBF', '0x1A']
关键修正说明
- 列表定义修正:给每个字符串添加
b前缀转为字节串,或在更新哈希时用encode('utf-8')将普通字符串转为字节(crc8库的update方法仅接受字节类型参数) - 移除无效断言:删除原代码中与需求不符的硬编码断言,避免程序异常终止
- 结果收集与格式化:新增列表存储每个元素的哈希结果,通过f-string将十六进制字符串格式化为
0xXX的大写形式,匹配期望输出格式
内容的提问来源于stack exchange,提问作者Yasir Glani
相关产品推荐
相关产品推荐

