Python 3:将十六进制转换为int时发生意外的ValueError

时间:2018-08-26 17:59:41

标签: python string python-3.x

当我尝试将字符串转换为位时,根据完全深奥的条件,它并不总是有效:

import test

首先,它似乎不能与包含空格的字符串一起使用,但实际上它不适用于“ helloworld”或类似的东西。那为什么它会和“死牛”一起工作呢? 我完全迷路了

2 个答案:

答案 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