conversion to quadword

Discussion in 'C Programming' started by arunmib, Nov 29, 2007.

  1. arunmib

    arunmib Guest

    hi all,
    How can I convert an Integer (int data type) and an unsigned char
    data type to a quadword? I want to know the conversion mechanism....

    Advance thanks for the help.
    arunmib, Nov 29, 2007
    #1
    1. Advertising

  2. arunmib

    CBFalconer Guest

    arunmib wrote:
    >
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism.


    What is a quadword?

    --
    Chuck F (cbfalconer at maineline dot net)
    <http://cbfalconer.home.att.net>
    Try the download section.


    --
    Posted via a free Usenet account from http://www.teranews.com
    CBFalconer, Nov 29, 2007
    #2
    1. Advertising

  3. arunmib <> writes:
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism....


    What exactly is a "quadword"? C defines no such type; it doesn't even
    define what a "word" is. Explain what a quadword is, and we may be
    able to tell you how to convert to it.

    --
    Keith Thompson (The_Other_Keith) <>
    Looking for software development work in the San Diego area.
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
    Keith Thompson, Nov 29, 2007
    #3
  4. arunmib

    cr88192 Guest

    "arunmib" <> wrote in message
    news:...
    > hi all,
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism....
    >


    a word like 'quadword' will annoy the standards-heads...

    as will defining such un-standardly things like 'type conversion' (too
    impure and vulgar for this high and refined group, which has moved above and
    beyond such primitive and carnal things as 'computers' and 'operating
    systems'...).

    so, in these here parts, 'long long' or 'uint64_t' are probably better
    terms...

    and, it suffices only to know that it does convert, not to concern outselves
    with such esoteric and sinister concepts as 'sign extension' and 'zero
    extension' (which may not neccissarily be the case on some or another arch
    that someone can drag up from somewhere or another).

    or such...


    > Advance thanks for the help.
    >
    >
    cr88192, Nov 29, 2007
    #4
  5. arunmib

    santosh Guest

    arunmib wrote:

    > hi all,
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism....
    >
    > Advance thanks for the help.


    C has no type called "quadword", so it defines no conversion mechanism
    for that. However your platform and implementation may implement such a
    type and if so, you have to refer to their documentation to find out
    the details for using it.
    santosh, Nov 29, 2007
    #5
  6. arunmib

    arunmib Guest

    On Nov 29, 12:17 pm, santosh <> wrote:
    > arunmib wrote:
    > > hi all,
    > > How can I convert an Integer (int data type) and an unsigned char
    > > data type to a quadword? I want to know the conversion mechanism....

    >
    > > Advance thanks for the help.

    >
    > C has no type called "quadword", so it defines no conversion mechanism
    > for that. However your platform and implementation may implement such a
    > type and if so, you have to refer to their documentation to find out
    > the details for using it.


    Thanks for the information....
    arunmib, Nov 29, 2007
    #6
  7. arunmib

    jacob navia Guest

    arunmib wrote:
    > hi all,
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism....
    >
    > Advance thanks for the help.
    >
    >

    quadword in Intel notation is a 64 bit integer.

    In 32 bit systems you can convert ints into quadwords by using
    an unnecessary cast

    int i;
    long long a = (long long)i;

    or just

    long long a = i;

    In intel architecture this is a sign extension of the 32 bits
    into 64 bits
    movsx %eax,%rax

    using gcc's notation.

    For unsigned chars you need an extension with ZERO extend.

    In C you would write:

    unsigned char c;
    long long a = (long long)c;

    movzxq %al,%rax

    if I remember correctly.


    --
    jacob navia
    jacob at jacob point remcomp point fr
    logiciels/informatique
    http://www.cs.virginia.edu/~lcc-win32
    jacob navia, Nov 29, 2007
    #7
  8. arunmib

    James Kuyper Guest

    arunmib wrote:
    > hi all,
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism....
    >
    > Advance thanks for the help.


    I think that veryone has been assuming that what you really wanted to
    know was the name the C quadword type. As other people have already
    said, while any particular implementation of C might or might not have
    an integer type which is 4 words long, the C standard does not specify
    which one it is.

    However, if you already know the name for the quadword type in a given
    implementation of C, it may be that all you're really asking is what you
    actually said: "How can I convert ... to a quadword"? If so, the answer
    is that the you do it precisely the same way as any other conversion:

    typedef implementation_specific_type quadword;
    typedef desired_integer_type Integer;

    Integer i = 42;
    quadword q = (quadword)i;
    unsigned char c = 'c';
    q = (quadword)c;
    James Kuyper, Nov 29, 2007
    #8
  9. James Kuyper <> writes:
    > arunmib wrote:
    >> How can I convert an Integer (int data type) and an unsigned char
    >> data type to a quadword? I want to know the conversion mechanism....

    >
    > I think that veryone has been assuming that what you really wanted to
    > know was the name the C quadword type. As other people have already
    > said, while any particular implementation of C might or might not have
    > an integer type which is 4 words long, the C standard does not specify
    > which one it is.
    >
    > However, if you already know the name for the quadword type in a given
    > implementation of C, it may be that all you're really asking is what
    > you actually said: "How can I convert ... to a quadword"? If so, the
    > answer is that the you do it precisely the same way as any other
    > conversion:
    >
    > typedef implementation_specific_type quadword;
    > typedef desired_integer_type Integer;
    >
    > Integer i = 42;
    > quadword q = (quadword)i;
    > unsigned char c = 'c';
    > q = (quadword)c;


    Assuming that "quadword" is an integer type, the casts are
    unnecessary. A value can be converted from any numeric type to any
    other numeric type with a simple assignment; it will be converted
    implicitly:

    Integer i = 42;
    quadword q = i;
    unsighed char c = 'c';
    q = c;

    If "quadword" *isn't* a numeric type (say, if it's a structure
    representing something bigger than the largest available integer
    type), then there is no language-defined conversion. If the type is
    provided by some library, then that library will probably provide one
    or more conversion routines. If you're defining it yourself, you'll
    need to define your own conversion routines.

    Again, the C language doesn't define a "quadword", or even a "word".
    If a "quadword" is meant to be 64 bits, then type "long long" or
    "unsigned long long" is probably the right thing; these are integer
    types, and can be implicitly converted to or from any other integer
    types. They're guaranteed to be *at least* 64 bits; in every
    implementation I've heard of they're exactly 64 bits.

    If a "quadword" is 4 32-bit words, for a total of 128 bits, there most
    likely isn't an integer type that big.

    This is why I (and several others) asked the OP to explain to us what
    a "quadword" is, and why we can't really answer his question until he
    tells us.

    --
    Keith Thompson (The_Other_Keith) <>
    Looking for software development work in the San Diego area.
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
    Keith Thompson, Nov 29, 2007
    #9
  10. arunmib

    Guest

    Keith Thompson wrote:
    > James Kuyper <> writes:

    ....
    > > However, if you already know the name for the quadword type in a given
    > > implementation of C, it may be that all you're really asking is what
    > > you actually said: "How can I convert ... to a quadword"? If so, the
    > > answer is that the you do it precisely the same way as any other
    > > conversion:
    > >
    > > typedef implementation_specific_type quadword;
    > > typedef desired_integer_type Integer;
    > >
    > > Integer i = 42;
    > > quadword q = (quadword)i;
    > > unsigned char c = 'c';
    > > q = (quadword)c;

    >
    > Assuming that "quadword" is an integer type, the casts are
    > unnecessary. A value can be converted from any numeric type to any
    > other numeric type with a simple assignment; it will be converted
    > implicitly:
    >
    > Integer i = 42;
    > quadword q = i;
    > unsighed char c = 'c';
    > q = c;


    You're right. I was just trying to demonstrate how to explicitly make
    the conversion happen by using a cast; I should have chosen an example
    where the cast was actually necessary.
    , Nov 29, 2007
    #10
  11. writes:
    > Keith Thompson wrote:
    >> James Kuyper <> writes:

    > ...
    >> > However, if you already know the name for the quadword type in a given
    >> > implementation of C, it may be that all you're really asking is what
    >> > you actually said: "How can I convert ... to a quadword"? If so, the
    >> > answer is that the you do it precisely the same way as any other
    >> > conversion:
    >> >
    >> > typedef implementation_specific_type quadword;
    >> > typedef desired_integer_type Integer;
    >> >
    >> > Integer i = 42;
    >> > quadword q = (quadword)i;
    >> > unsigned char c = 'c';
    >> > q = (quadword)c;

    >>
    >> Assuming that "quadword" is an integer type, the casts are
    >> unnecessary. A value can be converted from any numeric type to any
    >> other numeric type with a simple assignment; it will be converted
    >> implicitly:
    >>
    >> Integer i = 42;
    >> quadword q = i;
    >> unsighed char c = 'c';
    >> q = c;

    >
    > You're right. I was just trying to demonstrate how to explicitly make
    > the conversion happen by using a cast; I should have chosen an example
    > where the cast was actually necessary.


    If both types are numeric, there are very few cases where the cast is
    actually necessary. You might need a cast for an argument to a
    variadic function (where the compiler can't determine the expected
    type), or in some cases where you want fine-grained control within an
    expression. (Even in those cases, the cast isn't absolutely
    necessary; you can use a temporary object instead. IMHO in such cases
    a cast is cleaner; YMMV.)

    All casts should be viewed with suspicion.

    --
    Keith Thompson (The_Other_Keith) <>
    Looking for software development work in the San Diego area.
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
    Keith Thompson, Nov 29, 2007
    #11
  12. arunmib

    user923005 Guest

    On Nov 28, 8:30 pm, arunmib <> wrote:
    > hi all,
    > How can I convert an Integer (int data type) and an unsigned char
    > data type to a quadword? I want to know the conversion mechanism....


    /* Sounds like an OpenVMS programmer... */
    #include <stdio.h>
    int main(void)
    {
    long long signed_quadword;
    unsigned long long unsigned_quadword;
    static const int int_type = -23456;
    static const unsigned char unsigned_char_type = 65;

    /* Probably no surprises here */
    signed_quadword = int_type;
    printf("signed quadword became %lld from %d\n", signed_quadword,
    int_type);
    signed_quadword = unsigned_char_type;
    printf("signed quadword became %lld from '%c'=%u\n",
    signed_quadword, unsigned_char_type, (unsigned) unsigned_char_type);
    unsigned_quadword = unsigned_char_type;
    printf("unsigned quadword became %llu from '%c'=%u\n",
    unsigned_quadword, unsigned_char_type, (unsigned) unsigned_char_type);

    /* This one may provide surprises: */
    unsigned_quadword = (unsigned long long) int_type;
    printf("unsigned quadword became %llu from %d\n",
    unsigned_quadword, int_type);

    return 0;
    }
    user923005, Nov 29, 2007
    #12
    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. Luc Bisson

    Framework 1.0 to 1.1 conversion

    Luc Bisson, Nov 4, 2003, in forum: ASP .Net
    Replies:
    2
    Views:
    603
    Jim Blizzard [MSFT]
    Nov 19, 2003
  2. Amka
    Replies:
    8
    Views:
    533
    Jay B. Harlow [MVP - Outlook]
    Jan 28, 2004
  3. Thomas Bartzick
    Replies:
    0
    Views:
    2,262
    Thomas Bartzick
    Jun 26, 2003
  4. Troels Smit

    Conversion 1QN -> 2'Complement

    Troels Smit, Jun 30, 2003, in forum: VHDL
    Replies:
    1
    Views:
    4,167
    Troels Smit
    Jul 1, 2003
  5. , India
    Replies:
    2
    Views:
    456
    Fraser Ross
    Sep 15, 2009
Loading...

Share This Page