Python - 将字符串“0xDE 0xAD 0xBE 0xEF”解析为字节数组

问题描述:

有很多示例代码可以在几行代码中完成此操作。在Python 3.2中有一个库可以在一次调用中做到这一点?如果不是,那么最小代码是做什么的?Python - 将字符串“0xDE 0xAD 0xBE 0xEF”解析为字节数组

我很高兴能得到任何类似列表(可转位和迭代器)结果的结果...

编辑:你们是快!我喜欢这一个:

byte_collection = bytes(int(x, 16) for x in some_string.split()) 
+1

为什么会出现有问题 “的几行代码?”鉴于您可能会将此代码锁定在某个函数中,解决方案的一行还是很多很重要吗? – 2012-03-05 03:17:32

+0

接受的解决方案不需要定义我自己的方法来隐藏如何去做。在应用程序代码中不必要地包装标准python库是我的宠儿。这只是没有必要。我喜欢下面的解决方案,我接受并认为没有理由包装它。 – 2012-03-06 00:41:48

3>> bytes(int(x, 16) for x in '0xDE 0xAD 0xBE 0xEF'.split()) 
b'\xde\xad\xbe\xef' 
+0

这不适用于我的2.7.2 Python。 – 2012-03-05 03:24:56

+0

@Corey:没有人说这是应该的。 – 2012-03-05 03:25:19

+0

只是为了寻找那些可能会发现这一点的人。 – 2012-03-05 03:28:33

如果你想把它当作一个整数列表,这应该工作,假设s包含您的字符串:

[int(piece, 16) for piece in s.split()] 

如果你想把它当作一个字符串,则可以使用这样的:

''.join(chr(int(piece, 16)) for piece in s.split()) 

的整数列表:

list_of_ints = [int(x, 16) for x in inputstr.split()] 

字节的字符串(ASCII字符):

string_of_bytes = ''.join(chr(int(x, 16)) for x in inputstr.split()) 

在Python 3:

string_of_bytes = bytes(int(x, 16) for x in inputstr.split()) 
+0

int()'理解'0x'无需将其去掉 – 2012-03-05 06:03:26

+0

@gnibbler好点。 – Amber 2012-03-05 06:08:40