All of lore.kernel.org
 help / color / mirror / Atom feed
From: Tim Walberg <twalberg@comcast.net>
To: Ben Rosenberg <scdlbx@gmail.com>
Cc: Randi Botse <nightdecoder@gmail.com>,
	linux-c-programming@vger.kernel.org
Subject: Re: Help on bit operation
Date: Fri, 28 Aug 2009 15:14:20 -0500	[thread overview]
Message-ID: <20090828201420.GW5294@comcast.net> (raw)
In-Reply-To: <ca4725240908281258v4715038m1243ebf84b9f7ed9@mail.gmail.com>

[-- Attachment #1: Type: text/plain, Size: 1747 bytes --]

If you absolutely need to get at the 32-bit integer value, you can use

union mytype {
{ struct bits {
    unsigned int a:6;
    unsigned int b:4;
    unsigned int c:8;
    unsigned int d:5;
    unsigned int e:9;
  } b;
  unsigned int v;
} variable;

then access the bit-fields like

  unsigned int x = variable.b.e;
  variable.b.a = 3;
  x = variable.v;


  


On 08/28/2009 12:58 -0700, Ben Rosenberg wrote:
>>	On Fri, Aug 28, 2009 at 11:40 AM, Randi Botse<nightdecoder@gmail.com> wrote:
>>	> Ben, after assign all bitfield struct member, how to pack them to be a
>>	> 32bit integer value?
>>	>
>>	> DEC      BIN
>>	> 43        101011        -> foo.a (6 bit)
>>	> 11        1011            -> foo.b (4 bit)
>>	> 120      01111000    -> foo.c (8 bit)
>>	> 30        11110          -> foo.d (5 bit)
>>	> 418      110100010  -> foo.e (9 bit)
>>	>
>>	> the bit pattern is : 10101110110111100011110110100010 or 2933800354 in
>>	> decimal, is this possible?
>>	>
>>	> while with masking and shift i can pack them with:
>>	> ((foo.a & 0x3f) << 26) | ((foo.b & 0xf) << 22) | ((foo,c & 0xff) <<
>>	> 14) | ((foo.d & 0x1f) << 9) | (foo.e & 0x1ff)
>>	>
>>	>
>>	
>>	The bitfield struct is already packed, you don't need to do anything
>>	else. Just assign values to the different parts.
>>	
>>	Ben
>>	--
>>	To unsubscribe from this list: send the line "unsubscribe linux-c-programming" in
>>	the body of a message to majordomo@vger.kernel.org
>>	More majordomo info at  http://vger.kernel.org/majordomo-info.html
End of included message



-- 
+----------------------+
| Tim Walberg          |
| 830 Carriage Dr.     |
| Algonquin, IL 60102  |
| twalberg@comcast.net |
+----------------------+

[-- Attachment #2: Type: application/pgp-signature, Size: 197 bytes --]

  reply	other threads:[~2009-08-28 20:14 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-08-26 23:02 Help on bit operation Randi Botse
2009-08-26 23:33 ` Akos Marton
2009-08-26 23:37 ` Uday Verma
2009-08-26 23:45 ` Ben Rosenberg
2009-08-27  0:15 ` Glynn Clements
2009-08-27  6:43   ` Randi Botse
2009-08-28  4:52     ` Randi Botse
2009-08-28 17:02       ` Ben Rosenberg
     [not found]         ` <34e1241d0908281139k66e8102dy94b70e9fcfd86763@mail.gmail.com>
2009-08-28 18:40           ` Randi Botse
2009-08-28 19:58             ` Ben Rosenberg
2009-08-28 20:14               ` Tim Walberg [this message]
2009-08-28 20:19             ` Glynn Clements
2009-08-29  7:40               ` Randi Botse

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20090828201420.GW5294@comcast.net \
    --to=twalberg@comcast.net \
    --cc=linux-c-programming@vger.kernel.org \
    --cc=nightdecoder@gmail.com \
    --cc=scdlbx@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.