是否有任何Python模块允许人们自由地将原始字节重新解释为不同的数据类型并对它们执行各种算术运算?例如,看看这个C片段:
char test[9] = "test_data";
int32_t *x = test;
(*x)++;
printf("%d %.9s\n", x, test);
//outputs 1245780400 uest_data on LE system.
这里,test
和x
都指向同一块内存。我可以使用x
执行airthmetics和test
进行基于字符串的操作和单个字节访问。
我想在Python中做同样的事情 - 我知道我可以使用struct.pack
和struct.unpack
,我觉得需要在字节列表和整数之间进行转换,但也许在那里&#39 ; sa模块,使这种摆弄更容易。
我希望有一个支持算术的数据类型,同时允许我弄乱各个字节。这听起来不像是Python的用例,但不过,它是一个非常常见的问题。
我查看了pycrypto
代码库,因为密码术是此类功能最常见的用例之一,但pycrypto
在普通C中实现了大多数算法,而小部分Python使用的则更小两种手工制作的方法(long_to_bytes
和bytes_to_long
),用于在类型之间进行转换。
答案 0 :(得分:1)
您可以使用ctypes.Union
,类似于C中的联盟。
我没有多少C语言经验,但据我所知,Unions允许您将内存位置写为一种类型并将其作为另一种类型读取,反之亦然,这似乎适合您的用例。
https://docs.python.org/3/library/ctypes.html#structures-and-unions
否则,如果您的需求更简单,您可以使用内置的bytes
和bytearray
方法将int.to_bytes
/ int.from_bytes
个对象从/转换为整数。< / p>