2011-06-15 32 views
2

我在GAE上使用2.5来自gdata python模块的一些加密模块。我能够在字符串上使用hashAndSign,但该函数返回'B'无符号字符的array.array。array.array.tostring()的Python 2.5版本?

我仍然得到它一起进行实验,但有一件事现在我绊上得到一个:

array('B', [120, 231, 49, 2, 125, 143, 213, 14, 214, 66, 52, 11, 124, 154, 99, 179]) 

要像一个字符串表示:

'x\xe71\x02}\x8f\xd5\x0e\xd6B4\x0b|\x9ac\xb3' 

如何我可以让数组成为这样的字符串吗?

我知道这是一件很简单的事情,但它却在困扰着我。

我需要这个,所以我可以做一个.encode('base64')发送到我的客户端应用程序,希望能够用它来验证我签署的字符串。

+1

请格式化您的代码,谢谢! – Trufa 2011-06-15 19:09:46

回答

0

你的问题标题令人费解。 array.array对象的tostring()方法已经使用了很长一段时间:

Python 1.5.2 (#0, Apr 13 1999, 10:51:12) [MSC 32 bit (Intel)] on win32 
Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam 
>>> import array 
>>> q = array.array('B', [120, 231, 49, 2, 125, 143, 213, 14, 214, 66, 52, 11, 124, 154, 99, 179]) 
>>> q.tostring() 
'x\3471\002}\217\325\016\326B4\013|\232c\263' 
>>> 

旁白:是的,这是正确的,曾几何时,repr()做八进制,十六进制没有。

你究竟在Python 2.5中尝试了些什么?结果是什么?将完整的堆栈跟踪和错误消息复制/粘贴到您的问题的编辑中。

+0

男人我们的答案有什么区别?那么你为什么像我一样回答? – tony 2011-06-16 04:54:54

+0

@scr:人是你的差异程序破?两件事情:(1)你回答,好像OP没有提到tostring()(2)我试图让他提供代码和堆栈跟踪,以便我们可以帮助他解决他的问题。那么你为什么回答@ DSM答案的一个子集。 – 2011-06-16 08:36:25

+0

我想我提出的决定比@ DSM更合理。好,那么你的答案比我的答案更好?无论如何,没关系,让它成为,我不介意。 – tony 2011-06-16 08:50:34

2

如果由于某种原因,.tostring()方法不可用 - 这让我认为这个数组不同于通常的array.array,因为.tostring()至少可以追溯到python 2.4 - 然后

>>> import array 
>>> q = array.array('B', [120, 231, 49, 2, 125, 143, 213, 14, 214, 66, 52, 11, 124, 154, 99, 179]) 
>>> ''.join(chr(c) for c in q) 
'x\xe71\x02}\x8f\xd5\x0e\xd6B4\x0b|\x9ac\xb3' 

应该工作。

0

或者只是array.tostring方法: “Python 2.5的版本array.array.tostring的()”

>>> a = array.array('B', [120, 231, 49, 2, 125, 143, 213, 14, 214, 66, 52, 11, 1 
24, 154, 99, 179]) 
>>> a.tostring() 
'x\xe71\x02}\x8f\xd5\x0e\xd6B4\x0b|\x9ac\xb3'