当我尝试将字符串转换为位时,根据完全深奥的条件,它并不总是有效:
import test
首先,它似乎不能与包含空格的字符串一起使用,但实际上它不适用于“ helloworld”或类似的东西。那为什么它会和“死牛”一起工作呢? 我完全迷路了
答案 0 :(得分:1)
如果要将字符串转换为其位的十六进制表示,则int(s, 16)
不会这样做。 int(s, 16)
尝试将s
的字符视为整数的基数16表示。 'deadbeef'
仅包含以16为底的有效数字的字符。
d = 13
e = 14
a = 10
d = 13
b = 11
e = 14
e = 14
f = 15
deadbeef = 13*16**7 + 14*16**6 + 10*16**5 + 13*16**4 + 11*16**3 + 14*16**2 + 14*16**1 + 15
= 3735928559
其他任何字符串都不具有该属性。
如果要与代表字符串的位相对应的十六进制数字,请首先选择一种编码(可能是UTF8),然后使用类似binascii.hexlify
的内容:
>>> import binascii
>>> binascii.hexlify('hello world'.encode('utf8'))
b'68656c6c6f20776f726c64'
答案 1 :(得分:0)
int(hex_value,16)用于将十六进制字符串转换为int。如果传递无效的十六进制字符,则会遇到错误。 对于将字符串转换为位的用例,可以使用 bitarray 模块
import bitarray
ba = bitarray.bitarray()
ba.frombytes('Hi'.encode('utf-8'))
print ba