2017-07-20 32 views
1

是否有任何Python模塊允許您自由地將原始字節重新解釋爲不同的數據類型並對它們執行各種算術運算?例如,一起來看看這款C段:用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來執行批量處理和test以進行基於字符串的操作和單個字節的訪問。我想我可以使用struct.packstruct.unpack whenerver我覺得需要在字節列表和整數之間進行轉換,但也許有一個模塊可以使這樣的處理更容易。

我想有一個支持算術的數據類型,並在同一時間,可以讓我搞亂個別字節。這聽起來不像Python設計的用例,但是,這是一個相當普遍的問題。

我接過來一看進入pycrypto代碼庫,因爲密碼是最常見的用例這樣的功能之一,但pycrypto實現了其大部分的算法在普通的C和更小的Python部分使用了兩個手工方法(long_to_bytesbytes_to_long )用於類型之間的轉換。

回答

1

您可以使用ctypes.Union,它類似於工會在C.

我沒有在C多的經驗,但據我所知工會允許你寫一個內存位置爲一個類型並將其作爲另一種類型閱讀,反之亦然,這似乎適合您的使用情況。

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

否則,如果你的需求是簡單的,你可以只轉換bytes/bytearray對象從/使用內置int.to_bytesint.from_bytes方法整數。

+0

雖然工會不直接解決我的問題,他們肯定會幫助。謝謝! – user1234567