Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/267.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中字符数组到整数数组的类型转换或访问_Python_Parsing - Fatal编程技术网

Python中字符数组到整数数组的类型转换或访问

Python中字符数组到整数数组的类型转换或访问,python,parsing,Python,Parsing,我在Python中有一个char数组,它是从一个文件中读取的 char_array = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f] 如何将/typecast/access转换为一个整数数组,如 int_array[0] = 0x03020100 int_array[1] = 0x07060504 int_array[2] = 0x0b0a0908

我在Python中有一个char数组,它是从一个文件中读取的

char_array = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]
如何将/typecast/access转换为一个整数数组,如

int_array[0] = 0x03020100
int_array[1] = 0x07060504
int_array[2] = 0x0b0a0908
int_array[3] = 0x0f0e0d0c

类似于在C/C++中以整数形式访问字节数组,即将无符号字符*类型转换为无符号长*

类似于以下内容:

>>> def toInt(arr, idx):
...     res = 0
...     for i in xrange(4):
...       res |= (arr[idx*4 + i] << 8*i)
...     return res
... 

>>> '%08x' % toInt(char_array, 0)
'03020100'

>>> '%08x' % toInt(char_array, 1)
'07060504'
def toInt(arr,idx): ... res=0 ... 对于X范围内的i(4): ... res |=(arr[idx*4+i]>'%08x'%toInt(字符数组,0) '03020100' >>>“%08x”%toInt(字符数组,1) '07060504'
也许有一个更优雅的解决方案使用
struct

不确定这是否是最有效的方法,但看起来相当优雅:

from itertools import izip_longest
from struct import pack_into, unpack_from

def convert(bytes):
    it = iter(bytes)
    arr = bytearray(4)
    buf = buffer(arr)
    # a grouping trick (see itertools examples)
    for group in izip_longest(*[it]*4, fillvalue=0):
        # pack 4 bytes, then unpack high-endian
        pack_into('bbbb', arr, 0, *group)            
        intval, = unpack_from('<i', buf)
        yield hex(intval)


char_array = [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]

print list(convert(char_array))
# ['0x3020100', '0x7060504', '0xb0a0908', '0xf0e0d0c']
从itertools导入izip_
从结构导入打包到,从解包
def转换(字节):
it=iter(字节)
arr=bytearray(4)
buf=缓冲区(arr)
#分组技巧(参见itertools示例)
对于izip_中最长的组(*[it]*4,fillvalue=0):
#打包4个字节,然后解包high-endian
分组为('bbbb',arr,0,*组)

intval,=unpack_from('我怀疑您试图以一种非常单一的方式在Python中做一些事情。如果您能描述一下您试图实现的目标,也许会有所帮助?实际上,这似乎就是我要找的字符数组='\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f'int_数组=unpack('4L',字符数组)