Целочисленная (представляющая последовательность бит) реинтерпретация в виде массива символов в 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?
- Инвертировать отрицательные значения в списке
- Python: печать файла на stdout
- Почему синтаксическая ошибка имеет атрибут объекта с именем «del», «return» и т. Д.?
- Сравнение двух генераторов в Python
- в чем разница между functools.wraps и update_wrapper
Вы можете использовать модуль struct :
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']
Прочтите страницу документации, чтобы узнать о типах данных, и обратите внимание на достоверность.
- Python вычисляет 1.0 типа float, преобразуется в ноль, используя int ()
- Почему не True == True:
- работающие часы и запуск
- Какую версию Python следует использовать, если я новичок в Python?
- Проблемы с приложением примера примера Heroku для Python выполняются локально с помощью SSL
- Случайно в python 2.5 не работает?
- os.path.join () и os.path.normpath () добавляют двойную обратную косую черту в окнах
- Логический парадокс в питоне?
- Лучший способ присвоить список в var