0
VS私が「コンパクト化」のバイナリに、このような構造体をシリアル化する意図:のpythonのctype _pack_ G ++の#pragma pack
#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;
};
それはここでうまく動作し、クラス「foo」というの大きさがある、9ですまさに私が欲しいものです。
しかし、これをPython 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のバイナリ表現は "ff000000ffffffffffffffff"です。
これは混乱する問題です。それで私を助けてください。
ありがとうございました。
私は問題を解決するために周りの作業として "bitstruct" を使用します。 "ctypes"は本当にそれを作ることができない、または少なくとも、この問題を完全に解決することはできません。 – Wizmann