0
I의 의도는이 같은 구조체를 직렬화하는 "압축"진 : 그것은이다, 9이며, 여기에 잘 클래스 '푸'의 크기 작동파이썬 CTYPE _pack_ g 대 ++의 #pragma 팩
#include <cstdio>
#include <iostream>
using namespace std;
#define print(x) cout << x << endl
#pragma pack(1)
class Foo {
uint32_t a: 1;
uint32_t b: 2;
uint32_t c: 5;
uint64_t d;
};
int main() {
print(sizeof(char));
print(sizeof(Foo));
return 0;
};
정확히 내가 원하는 것.
그러나 파이썬 ctypes lib로 다시 구현하려고하면 모든 것이 잘못됩니다.
import ctypes
from io import BytesIO
from ctypes import *
from binascii import hexlify
class RawMessage(ctypes.Structure):
_pack_ = 1
_fields_ = [
('a', ctypes.c_uint, 1),
('b', ctypes.c_uint, 2),
('c', ctypes.c_uint, 5),
('d', ctypes.c_ulong),
]
def dump(o):
s = BytesIO()
s.write(o)
s.seek(0)
return hexlify(s.read())
if __name__ == '__main__':
m = RawMessage()
m.a = m.b = m.c = m.d = 0xFFFFFFFFFFFFFFFF
print ctypes.sizeof(m)
print dump(m)
RawMessage의 크기는 내가 "팩"속성이 전혀 작동하지 않는 것 같아요 (12)이다. 메시지 m의 2 진 표현은 "ff000000ffffffffffffffff"입니다.
혼란스러운 문제입니다. 그걸 도와주세요.
감사합니다. 당신이 RawMessage
의 sizeof의 9 싶은 경우
나는 주위에 작업하는 문제를 해결하기로 "bitstruct"를 사용합니다. "ctypes"가 실제로이 문제를 해결할 수는 없거나 최소한이 문제를 총체적으로 해결할 수는없는 것 같습니다. – Wizmann