Bit packing structs that are non byte aligning...

Started by
3 comments, last by gimp 23 years, 11 months ago
I''ve created this ... -thing- based on some vague comments I recieved on a newsgroup. I was wondering if any of guy bit guru''s would mind helping me get it in to a compliling state: #pragma pack( push, single_bit_packing ) #pragma pack(1) struct turretdirection_t { int smallerint TurretAngle:9; int smallerint TurretHeight:7; }; #pragma pack( pop, single_bit_packing ) It''s meant to allow me to store two values in two bytes but where one is 9 bit''s long and the other 7 bits long. Something is definatly wrong with that smallerint thing, and the colon-number is something I can''t seem to find in my manuals. Once I work this out then all I have to do is work out how to put data in and get data out of it many thanks chris
Chris Brodie
Advertisement
This is one of those things that you''d really have to say which compiler you''re using before any of us could help. Really, though, I think you''d be much better off just creating a class and manually doing bitshift operations.
I think:
struct turretdirection_t{unsigned short TurretAngle:9; unsigned short TurretHeight:7; }; 

Would work fine... the colon:number stuff is standard, look up ''bitfields'' in your docs.
Your working at much to low level for starting out programming a multiplayer game. Bit packing is a compression technique which usually is best left for later in the developemnt cycle where you can better make the decesion which fields need to be packed and how. Starting out with these built in bit packing structs will only limit you later and as well as obfucsate the network code design. I suggest working on a simple generic packet serailizer code. Given a packet class turn it into a stream of data which can be sent over the network and recomposed on the other side. It''s not trivial to design a flexible system, and you''ll learn alot. Good Luck.

-ddn
Thanks for the advice and solutions guys. I probably AM pushing things a litte to far right now. For the majority of my other numbers I''m using whole bytes.

Reason I''m poushing this now is mostly preplanning. Towards the end of the project just about all numbers will be non standard. This onle example is mostly so my code can have a single working example for me to clone later on.

The struct is wrapped by a class that handles certain things, so I have say a ''Movement'' class that manages movement messages and the data structures therein. I''m not too worried about other code as the class hides the implementation of the data structure.

Essentially I have the ''bitfield'' class operating already the structs I was asking about was just going to allow me to order the bits to span byte boundries so when it come time to form(serialize) the winsock string I can just memcopy the struct in to the string...well thats the plan anyway.

Again thanks..

Chris
Chris Brodie

This topic is closed to new replies.

Advertisement