C样式数据在Python

时间:2017-07-20 10:22:51

标签: python type-conversion

是否有任何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.

这里,testx都指向同一块内存。我可以使用x执行airthmetics和test进行基于字符串的操作和单个字节访问。

我想在Python中做同样的事情 - 我知道我可以使用struct.packstruct.unpack,我觉得需要在字节列表和整数之间进行转换,但也许在那里&#39 ; sa模块,使这种摆弄更容易。

我希望有一个支持算术的数据类型,同时允许我弄乱各个字节。这听起来不像是Python的用例,但不过,它是一个非常常见的问题。

我查看了pycrypto代码库,因为密码术是此类功能最常见的用例之一,但pycrypto在普通C中实现了大多数算法,而小部分Python使用的则更小两种手工制作的方法(long_to_bytesbytes_to_long),用于在类型之间进行转换。

1 个答案:

答案 0 :(得分:1)

您可以使用ctypes.Union,类似于C中的联盟。

我没有多少C语言经验,但据我所知,Unions允许您将内存位置写为一种类型并将其作为另一种类型读取,反之亦然,这似乎适合您的用例。

https://docs.python.org/3/library/ctypes.html#structures-and-unions

否则,如果您的需求更简单,您可以使用内置的bytesbytearray方法将int.to_bytes / int.from_bytes个对象从/转换为整数。< / p>