파이썬에서 바이트로 정의한대로 ctype.Structure에 액세스하려고합니다 (b''
).ctypes를 바이트로 변환하는 방법
올바른 방법인지 모르겠습니까? 다른 장치에 헤더 (아키텍처가 없어야 함)를 보내야합니다.
class Header(ctypes.Structure):
_pack_ = 2
_fields_ = [
('version', c_uint8),
('additional_options', c_uint8),
('soft_version', c_uint16),
('compilation_time', c_uint8 * 6),
('crc', c_uint16)
]
가 지금은 CRC를 계산하기 위해 필요로
그래서 내가 예를 들어 그것을 정의했다. 마감일 :version
에서
compilation_time
까지 바이트로 작업하는 함수가 있습니다.
그래서 나를 위해 그것은 그냥 ctypes.Structure 바이트 (b ")로 변환하거나 직접 메모리에 액세스하고 마지막 두 바이트를 변경합니다.
struct을 사용해 보았지만 pragma 옵션을 찾지 못했습니다.
BIG 단점 가독성이다. 내 머리글은 128 바이트이므로 정말 엉망이고 읽을 수 없습니다 (ctypes 비교). 두 번째로'H' ='unsigned short' **로 기계에서 무엇을하겠습니까 **! = ** 16-bit? –
@ S.R 당신은 "시도 구조체를 사용했지만 ** pragma ** 옵션을 찾을 수 없습니다"언급했다. 구조체를 전혀 사용하지 않으려면보다 구체적으로 작성하십시오. 어쨌든 ctypes 솔루션을 보여주기 위해 업데이트되었습니다. –
@MarekTolonen 제 의견으로는 두 옵션 모두 파이썬 코드의 나머지 부분만큼 읽기 쉽지 않습니다. 하지만 마침내 네이티브'struct'를 사용했습니다. –