how to place two unsigned 16 bit values into a 32 bit unsigned value

Discussion in 'C++' started by pasamdivya@gmail.com, Nov 18, 2008.

  1. Guest

    Hi everyone,

    I need to store an unsigned 16 bit number in the upper (MSB) and
    another unsigned 16 bit number in the 16 LSB. Basically, I am trying
    to store two unsigned 16 bit numbers into one unsigned 32 bit number.

    So far, I have the following:

    struct
    {
    unsigned int num1:16;
    unsigned in num2:16;
    } twoUnsigned16BitNums;

    unsigned int num;

    What I am having trouble with is to store the two 16 bit numbers into
    the 32 bit number. I know one option is to use bit wise ANDs and ORs.
    Any help on your part is greatly appreciated. Best Regards.
    , Nov 18, 2008
    #1
    1. Advertising

  2. James Kanze Guest

    Re: how to place two unsigned 16 bit values into a 32 bit unsignedvalue

    On Nov 18, 9:22 pm, wrote:

    > I need to store an unsigned 16 bit number in the upper (MSB)
    > and another unsigned 16 bit number in the 16 LSB. Basically, I
    > am trying to store two unsigned 16 bit numbers into one
    > unsigned 32 bit number.


    > So far, I have the following:


    > struct
    > {
    >    unsigned int num1:16;
    >    unsigned in num2:16;
    > } twoUnsigned16BitNums;


    That may or may work (then memcpy'ing the results); check your
    compilers documentation.

    > unsigned int num;


    > What I am having trouble with is to store the two 16 bit
    > numbers into the 32 bit number. I know one option is to use
    > bit wise ANDs and ORs.


    That's the usual solution.

    > Any help on your part is greatly appreciated.


    Is "number1 << 16 | number2" what you're looking for? (Just
    make sure that 32 bit arithmetic is used here. If number1 is an
    unsigned int, and int's are only 16 bits, you'll have to cast it
    to unsigned long first.)

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
    James Kanze, Nov 18, 2008
    #2
    1. Advertising

  3. Bill Davy Guest

    Depending on portability (compiler, processor, packing, etc) you may be able
    to use a union. For VS on Intel

    union

    {

    struct

    {

    unsigned a:16;

    unsigned b:16;

    } Half;

    struct

    {

    unsigned ab:32;

    } Whole;

    } t;

    t.Half.a = 0x1234;

    t.Half.b = 0x5678;

    t.Whole.ab is now 0x56781234


    <> wrote in message
    news:...
    > Hi everyone,
    >
    > I need to store an unsigned 16 bit number in the upper (MSB) and
    > another unsigned 16 bit number in the 16 LSB. Basically, I am trying
    > to store two unsigned 16 bit numbers into one unsigned 32 bit number.
    >
    > So far, I have the following:
    >
    > struct
    > {
    > unsigned int num1:16;
    > unsigned in num2:16;
    > } twoUnsigned16BitNums;
    >
    > unsigned int num;
    >
    > What I am having trouble with is to store the two 16 bit numbers into
    > the 32 bit number. I know one option is to use bit wise ANDs and ORs.
    > Any help on your part is greatly appreciated. Best Regards.
    Bill Davy, Nov 19, 2008
    #3
  4. James Kanze Guest

    Re: how to place two unsigned 16 bit values into a 32 bit unsignedvalue

    On Nov 19, 9:24 am, "Bill Davy" <> wrote:
    > Depending on portability (compiler, processor, packing, etc)
    > you may be able to use a union. For VS on Intel


    > union
    > {
    > struct
    > {
    > unsigned a:16;
    > unsigned b:16;
    > } Half;


    > struct
    > {
    > unsigned ab:32;
    > } Whole;
    > } t;


    > t.Half.a = 0x1234;
    > t.Half.b = 0x5678;


    > t.Whole.ab is now 0x56781234


    Maybe. Trying to access it is undefined behavior, so there's no
    way to tell.

    --
    James Kanze (GABI Software) email:
    Conseils en informatique orientée objet/
    Beratung in objektorientierter Datenverarbeitung
    9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34
    James Kanze, Nov 19, 2008
    #4
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Fangs
    Replies:
    3
    Views:
    9,763
    darshana
    Oct 26, 2008
  2. Replies:
    4
    Views:
    314
    Old Wolf
    Jul 3, 2005
  3. fancyerii
    Replies:
    21
    Views:
    1,448
    Roedy Green
    Nov 5, 2007
  4. Fore
    Replies:
    29
    Views:
    15,186
    Rashad
    Sep 21, 2008
  5. pozz
    Replies:
    12
    Views:
    722
    Tim Rentsch
    Mar 20, 2011
Loading...

Share This Page