Целочисленная (представляющая последовательность битов) реинтерпретация как массив символов в Python - PullRequest
4 голосов
/ 02 декабря 2008

Я написал некоторый 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?

1 Ответ

9 голосов
/ 02 декабря 2008

Вы можете использовать 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']

Прочтите страницу документации, чтобы узнать о типах данных, и обратите внимание на порядковый номер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...