У меня есть структура Ctypes, которую нужно редактировать стандартным способом [setattr (структура, значение)], которую легко реализовать, но мне также нужно иметь возможность редактировать необработанный буфер, так как я хочу бытьвозможность назначить определенный бит значению (например, бит 25 = 0xd5). Как мне это сделать?
очень упрощенный пример кода, если это помогает
import ctypes as *
#ctypes array with ~250,000 c_uint32 elements
huge_arr = (c_uint32*250,000)(*range(250,000)) # Fill with dummy data for this example
class Example(Structure):
_pack_ = 1
_fields_ = [
("a", c_uint16),
("b", c_uint16, 14),
("c", c_uint16, 2),
("d", c_uint32, 24),
("e", c_uint32, 8),
("f", c_uint16),
("g", c_uint16)
]
offset = 123456
example_struct = Example.from_buffer(huge_arr, offset)
# Ideally, I'd like to be able to set bits in example_struct. for example, example_struct[2] = 0x2b
Я знаю, что это возможносделать example_struct [2] = 0x2b, выполнив огромный_arr [смещение + 2] = 0х2b, но моя программа сложнее, чем в этом примере, и огромный_арр определен (и остается) в основном файле, а пример_структура передается в качестве параметрадругая функция в другом файле, так что огромный_арр находится вне области видимости. Есть ли способ изменить n-й бит exmaple_struct?
Еще одна вещь, которую стоит отметить, эта программа написана на Python 2.7, но даже решение на python3 приветствуется
Спасибозаранее за вашу помощь (и я, безусловно, отмечу лучший ответ для любой доброй души, которая может решить эту проблему)