如何对十六进制值执行异或?字符串转整数报错求助
问题解决:字符串与整数异或的报错处理
你的问题重现
你写的这段代码:
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
相关产品推荐
相关产品推荐

