You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编写字符串转ASCII十六进制数字求和函数遇转码难题求助

解决hex_hash函数的实现问题

我来帮你搞定这个函数!你在ASCII转十六进制环节卡壳的问题,主要是没找对每个字符的正确处理方式,咱们一步步拆解实现:

完整实现代码

先给你可以直接用的版本,两种写法任你选:

常规循环写法

def hex_hash(code):
    total = 0
    for char in code:
        # 把单个字符转成ASCII码的十六进制字符串(去掉默认的0x前缀)
        hex_repr = hex(ord(char))[2:]
        # 遍历十六进制字符串里的每个字符
        for hex_char in hex_repr:
            # 只保留数字字符,转成整数后累加
            if hex_char.isdigit():
                total += int(hex_char)
    return total

简洁生成器写法

def hex_hash(code):
    return sum(
        int(hex_char)
        for char in code
        for hex_char in hex(ord(char))[2:]
        if hex_char.isdigit()
    )

关键步骤解释

  1. 字符转ASCII十六进制:
    单个字符的ASCII码用ord(char)获取,再用hex()转成十六进制字符串,但hex()会返回带0x前缀的结果(比如hex(ord('A'))返回'0x41'),所以我们用[2:]去掉前缀,得到纯十六进制字符。

  2. 过滤字母并求和:
    遍历每个十六进制字符串的字符,用isdigit()判断是否是数字(忽略A-F/a-f这些十六进制字母),把符合条件的字符转成整数后累加求和。

纠正你之前的尝试误区

  • code.encode('hex'):Python3已经移除了这个方法,要转整个字符串的十六进制得用code.encode().hex(),但这种方式是把整个字符串转成连续的十六进制,和逐个字符处理效果一致,但逐个处理更直观。
  • code.hex():这个方法是字节串的方法,字符串要先转成字节(比如code.encode().hex())才能用。
  • hex(code):hex()函数接收的是整数,直接传字符串会报错,这就是你之前出错的核心原因。

测试示例

比如输入"ABC":

  • A的ASCII十六进制是41,数字和为4+1=5
  • B的ASCII十六进制是42,数字和为4+2=6
  • C的ASCII十六进制是43,数字和为4+3=7
  • 总和是5+6+7=18,调用hex_hash("ABC")会返回18,符合预期。

内容的提问来源于stack exchange,提问作者Steve

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 03:45:15