2008-12-02 31 views
4

我已經編寫了一些我想移植到python的C代碼,因爲我覺得python是一個更好的'概念'語言。整數(表示一系列位)重新解釋爲Python中的字符數組

在我的C代碼,我使用的內存的重新解釋,以實現自己的目標,例如:

sizeof(int) is 4 byte 
sizeof(char) is 1 byte 

char c[4]={0x01,0x30,0x00,0x80}; 
int* i=(int*)c; 

*i has the value 0x80003001 

同樣的,如果我有:

int* j = (int*)malloc(sizeof(int)); 
char* c = (char*)j; 
*j = 0x78FF00AA; 

c is now {0xAA, 0x00, 0xFF, 0x78} 

我願做類似的事情在python ,我意識到我可以使用位操作來實現這一點:

chararray=[] 
num=1234567890 
size=8 

while len(chararray) < size: 
    char = chr((num & 255)) 
    num = num >> 8 
    chararray.append(char) 

但是我希望在那裏將是實現這一目標的更快捷方式。

python是否有類似於C的聯合?

+0

這些都是可怕的編碼實踐,即使是在C語言中。通常,這些都是替代Python中array.Array('B')更明智的東西的替身。你能給出一些背景或理由或原因,你爲什麼這樣做?可能有更好的Python解決方案,根本不是C類。 – 2008-12-02 11:00:16

回答

9

可以使用struct module

import struct 

# Pack a Python long as if it was a C unsigned integer, little endian 
bytes = struct.pack("<I", 0x78FF00AA) 
print [hex(ord(byte)) for byte in bytes] 

['0xaa', '0x0', '0xff', '0x78'] 

閱讀文檔頁面,以查找有關數據類型,並注意字節順序。

相關問題