Python 比较字符和十六进制

Python compare char to hex

>>> var = 'g'  
>>> print hex(ord(var))  
0x67  
>>> print hex(ord(var)) == 0x67  
False

为什么在 python 2.7 中不是这样?
将 'g' 与十六进制值 0x67 进行比较的最佳方法是什么?

根据 documentation

hex(x)

Convert an integer number (of any size) to a lowercase hexadecimal string prefixed with 0x

所以hex(ord(var)) == '0x67'

只是 print 删除了引号。

>>> var = 'g'
>>> hex(ord(var))
'0x67'
>>> hex(0x67)
'0x67'
>>> hex(ord(var)) == hex(0x67)
True

当然 ord(g) == 0x67 因为数字是相等的 尽管 表示,即 0x67 和 103 和 0147 在内部都是相同的数字

先看hex(ord(var))的类型:

>>> print type(hex(ord(var)))
<type 'str'> 

然后看0x67

的类型
>>> type(0x67)
<type 'int'>

您正在比较 strint。所以,你应该这样做:

hex(ord(var)) == '0x67'

hex returns 一个字符串,您正在将其与数字进行比较。要么

ord(var) == 0x67

hex(ord(var)) == "0x67"

(第一个不太容易出错,因为它不区分大小写)

您可以简单地获取 ord 并将其与 0x67 进行比较

>>> ord('g') == 0x67
True

如果你这样做:

>>> 0x67
103

您仍在获取该字符的 ascii 码。

此外,根据您的明确示例,如果您试图将其转换为 int 以实际与 0x67 进行比较,那么您需要以 base-16 进行:

>>> int(hex(ord('g')), 16) == 0x67
True

错误案例:

>>> int(hex(ord('d')), 16) == 0x67
False