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

如何对十六进制值执行异或?字符串转整数报错求助

问题解决:字符串与整数异或的报错处理

你的问题重现

你写的这段代码:

string = "test"
for index, character in enumerate(string):
    value = hex(ord(character)) ^ 0xababab

跑起来会报「无法对字符串与整数执行异或操作」的错,后来你试了int(hex(ord(character))),又遇到Invalid literal for int with base10的问题,核心就是想搞明白怎么让hex(...)的结果能和整数做异或对吧?

为啥会踩坑?

  • 首先,hex()这个函数返回的是字符串哦!比如ord('t')得到116,hex(116)会返回'0x74'——一个带0x前缀的十六进制字符串,字符串和整数当然不能直接异或啦。
  • 然后你用int(hex(...))的时候,int()默认是按十进制来解析的,但'0x74'是十六进制格式,十进制里根本没有x这个字符,自然就报错了。

两种靠谱的解决办法

方法1:直接用ord()的结果运算(最推荐)

其实完全没必要绕hex()这一步!ord(character)本身就是整数,直接和0xababab做异或就完事了:

string = "test"
for index, character in enumerate(string):
    value = ord(character) ^ 0xababab
# 如果之后需要十六进制的结果,再用hex(value)转换就行

这种方式最直接,少了不必要的字符串转换,效率也更高。

方法2:一定要用hex()的话,给int()指定进制

如果因为某些原因你必须先转成十六进制字符串再转回整数,那调用int()的时候要加上第二个参数16,告诉它“这是十六进制的字符串,按十六进制解析”:

string = "test"
for index, character in enumerate(string):
    hex_str = hex(ord(character))
    value = int(hex_str, 16) ^ 0xababab

不过这种方法多了一次字符串转整数的操作,不如第一种简洁高效,优先选方法1哈。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:38:18