1

我无法理解以下语句的结果:

>>> from array import array
>>> array('L',[0xff,0xff,0xff,0xff])
array('L', [255L, 255L, 255L, 255L])


>>> from array import array
>>> array('L','\xff\xff\xff\xff')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: string length not a multiple of item size
4

2 回答 2

3

您在 Python 的 64 位版本上运行它,array它将类型代码'L'视为 64 位无符号整数。

>>> array('L','\xff\xff\xff\xff\xff\xff\xff\xff')
array('L', [18446744073709551615L])

文档不是很清楚。它所说的只是'L'至少四个字节。

于 2010-05-02T09:05:38.107 回答
1

在第一种情况下,您正在从具有 4 个元素的列表中初始化数组。这将为您提供一个包含 4 个元素的数组:列表中的每个值一个。

在第二种情况下,您从字节字符串初始化数组:字符串中的字节将直接复制到数组中。'L' 说明符创建一个最小大小为 4 个字节的无符号长数组。

在我的机器(Windows 64 位 Python 2.6)上,从 4 字节字符串初始化工作正常:

>>> a = array('L','\xff\xff\xff\xff')

>>> a.tostring()
'\xff\xff\xff\xff'

我猜您使用的任何版本的 Python 都有 8 个字节而不是 4 个字节的无符号长整数。尝试将您创建的数组从列表转换回字符串,看看包含多少字节:

>>> a = array('L',[0xff,0xff,0xff,0xff])
>>> a.tostring()
'\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00\xff\x00\x00\x00'

PS 我假设你使用的是 Python 2.x,在 Python 3.x 上你会得到一个 TypeError。

于 2010-05-02T09:07:59.147 回答