我想知道一个字符串是否使用转义字符来表示十六进制字符。与string.isalnum()
具有相同风格的东西:
"\x01".ishex()
返回True
和
"^".ishex()
返回False
。
这样的功能是否存在?
如果没有,如果它只包含转义字符,是否会返回True
?
答案 0 :(得分:2)
"\x01"
实际上不包含转义字符。它只是一个字符串,其中第一个字符是值为1的字节。这是因为 - 至少在python 3之前 - python使用字符串来表示字节数组。
在REPL中尝试:
>>> "\x30" == "0"
True
>>>
这是因为字符0
表示为值为30的字节。
现在,如果你真的想要这样做。您可以使用trevor的hack,或者您可以检查字符串是否有任何不可打印的字符,最终表示为十六进制序列。
import string
def is_hex(a):
printable = set(string.printable) - set("\x0b\x0c")
return any(c not in printable for c in a)
用法:
>>> is_hex("\x01")
True
>>> is_hex("^")
False
>>>
答案 1 :(得分:1)
ASCII将“printable characters”定义为0x20到0x7E之间的那些,因此您只需检查字符的代码点。
def is_printable(c):
return ord(c) >= 0x20 and ord(c) <= 0x7E
你也可以检查代表的长度,虽然它是一种黑客攻击:
def is_hex(s):
return len(repr(s)) > len(s) + 2
>>> is_hex("\x01")
True
>>> is_hex("^")
False
答案 2 :(得分:0)
没有自动执行此操作的功能。十六进制编码(使用任何语言)使用一组有限的ASCII代码集字符进行“编码”,以表示不同范围内的某些其他字符。十六进制可以用多种方式用字符串表示(“OA”可以解释为十六进制或基于十六进制的数值的一些转义格式)。是的,一个函数可以基于这些标准形式中的一些来编写,但它不是100%可靠的,因为它可以返回的最好的是所说的String(它实际上只是一个字符数组)绝对不是或者'可能是'hex。