0

挑战是采用字符串格式的十六进制值"FF"并将其转换为等效的十进制值。

我知道使用字符串格式"\xFF",这就像ord("\xFF").

但是,我想解析一个没有 \x 标记的十六进制字符串,即"01 02 03 04".

我的方法是尝试以格式格式化后面的字符串"\xFF",执行以下操作:

input = "01 02 03 04"
s = ""
s += "\x" + input[0:2]

但是,任何将"\", "\x", 甚至"\x0"字符放入字符串的尝试,我都会收到以下错误:

SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \xXX escape

由于字符串是不可变的,因此我无法创建具有完整“\xFF”格式的字符串,然后在事后更改值。有没有人有提示可以克服这个问题?

在此先感谢...我希望我的要求是有道理的!

4

2 回答 2

4

构造int函数接受一个可选的第二个参数,给出它的基数,如果你告诉它使用基数 16,它将解析十六进制字符串表示:

input = "01 02 03 04"
s = input[0:2]
>>> int(s, 16)
1
>>> int('FF', 16)
255
于 2013-10-29T16:11:04.603 回答
1

你不

my_input = "01 02 03 04"
s +=chr(int(my_input[0:2],16)) #results in "\x01" (note the 16 makes it hex chars)

顺便说一句,不要将输入用作变量名

我认为你真正想要的是

s = "".join(chr(int(c,16)) for c in "01 02 03 04".split())
#s is now "\x01\x02\x03\x04"
#or maybe
s = [int(c,16) for c in "01 02 03 04 0a".split()]
#s is now [1,2,3,4,10]
于 2013-10-29T16:11:05.457 回答