conversion into hexadecimal values

Discussion in 'C Programming' started by sweeet_addiction16@yahoo.com, Aug 30, 2007.

  1. Guest

    hello
    im programming in c.i have to write about 100 hexadecimal values in to
    a file. how do i do it?pls help me
     
    , Aug 30, 2007
    #1
    1. Advertising

  2. osmium Guest

    <> wrote:

    > im programming in c.i have to write about 100 hexadecimal values in to
    > a file. how do i do it?pls help me


    Computer files consist of 1's and 0's. Hexadecimal is a *representation* of
    a number. I suggest you read the article in the link,reformulate your
    question if you still have one, and post again.

    http://en.wikipedia.org/wiki/Hexadecimal
     
    osmium, Aug 30, 2007
    #2
    1. Advertising

  3. Chris Dollin Guest

    wrote:

    > hello
    > im programming in c.i have to write about 100 hexadecimal values in to
    > a file. how do i do it?pls help me


    Pls hlp s b spllgn ll r wrds t prprl. Thk w.

    There are no "hexadecimal values"; there are integer values which may be
    represented in hexadecimal. If you have a (n unsigned) value you want to
    write in hexadecimal, you can use the %x format conversion of [f]printf.
    If you have several, you can write them one at a time, and it would
    probably make sense to use a loop to do this.

    If you're not familiar with `[f]printf` and format conversions, become
    so: they'll be documented in any decent C book, your man pages if you're
    on a Unixy box, and you can probably google for them too.

    --
    I "ae oe" OI

    Hewlett-Packard Limited Cain Road, Bracknell, registered no:
    registered office: Berks RG12 1HN 690597 England
     
    Chris Dollin, Aug 30, 2007
    #3
  4. Chris Dollin said:

    <snip>

    > There are no "hexadecimal values";


    You could, however, be forgiven for thinking there are, if you were
    reading the C Standard. It is a little loose in its terminology at
    times.

    <snip>

    --
    Richard Heathfield <http://www.cpax.org.uk>
    Email: -www. +rjh@
    Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
    "Usenet is a strange place" - dmr 29 July 1999
     
    Richard Heathfield, Aug 30, 2007
    #4
  5. Guest

    On Aug 30, 8:03 pm, "osmium" <> wrote:
    > <> wrote:
    > > im programming in c.i have to write about 100 hexadecimal values in to
    > > a file. how do i do it?pls help me

    >
    > Computer files consist of 1's and 0's. Hexadecimal is a *representation* of
    > a number. I suggest you read the article in the link,reformulate your
    > question if you still have one, and post again.
    >
    > http://en.wikipedia.org/wiki/Hexadecimal



    im sorry ..may be my question wasnt tht clear.i have to write the
    following values into a file(say using fwrite)

    4d 54 68 64 00 00 00 06 00 00 00 01 00 80 4d 54 72 6b 00 00 00 8c 00
    ff 58
    04 04 02 30 08 00 ff 59 02 00 00 00 90 3c 28 81 00 90 3c 00 00 90 3c
    1e 81
    00 90 3c 00 00 90 43 2d 81 00 90 43 00 00 90 43 32 81 00 90 43 00 00
    90 45
    2d 81 00 90 45 00 00 90 45 32 81 00 90 45 00 00 90 43 23 82 00 90 43
    00 00
    90 41 32 81 00 90 41 00 00 90 41 2d 81 00 90 41 00 00 90 40 32 40 90
    40 00
    40 90 40 28 40 90 40 00 40 90 3e 2d 40 90 3e 00 40 90 3e 32 40 90 3e
    00 40
    90 3c 1e 82 00 90 3c 00 00 ff 2f 00
    all these values are to be written into a file
    how do i do it?
     
    , Aug 30, 2007
    #5
  6. In article <>,
    <> wrote:
    >im sorry ..may be my question wasnt tht clear.i have to write the
    >following values into a file(say using fwrite)


    > 4d 54 68 64 00 00 00 06 00 00 00 01 00 80 4d 54 72 6b 00 00 00 8c 00
    >ff 58

    [...]

    >all these values are to be written into a file
    >how do i do it?


    Code fragment:

    unsigned char outputbuffer[] = {
    0x4d, 0x54, 0x68, 0x64, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
    0x01, 0x00, 0x80, 0x4d, 0x54, 0x72, 0x6b, 0x00, 0x00, 0x00, 0x8c, [etc]
    };

    filestream = fopen('filename', 'w');
    fwrite(outputbuffer, sizeof outputbuffer, 1, filestream);
    --
    All is vanity. -- Ecclesiastes
     
    Walter Roberson, Aug 30, 2007
    #6
  7. Ben Pfaff Guest

    -cnrc.gc.ca (Walter Roberson) writes:

    > filestream = fopen('filename', 'w');


    Both of these should be "string literals", not 'character
    constants'.
    --
    char a[]="\n .CJacehknorstu";int putchar(int);int main(void){unsigned long b[]
    ={0x67dffdff,0x9aa9aa6a,0xa77ffda9,0x7da6aa6a,0xa67f6aaa,0xaa9aa9f6,0x11f6},*p
    =b,i=24;for(;p+=!*p;*p/=4)switch(0[p]&3)case 0:{return 0;for(p--;i--;i--)case+
    2:{i++;if(i)break;else default:continue;if(0)case 1:putchar(a[i&15]);break;}}}
     
    Ben Pfaff, Aug 30, 2007
    #7
  8. In article <>,
    Ben Pfaff <> wrote:
    >-cnrc.gc.ca (Walter Roberson) writes:


    >> filestream = fopen('filename', 'w');

    >
    >Both of these should be "string literals", not 'character
    >constants'.


    Opps, you are right. I've been programming in Matlab a lot lately,
    which uses '' for string literals.
    --
    There are some ideas so wrong that only a very intelligent person
    could believe in them. -- George Orwell
     
    Walter Roberson, Aug 30, 2007
    #8
  9. CBFalconer Guest

    wrote:
    >
    > im programming in c.i have to write about 100 hexadecimal values
    > in to a file. how do i do it?pls help me


    This may be helpful:

    /* Routines to display values in various bases */
    /* with some useful helper routines. */
    /* by C.B. Falconer, 19 Sept. 2001 */
    /* Released to public domain. Attribution appreciated */

    #include <stdio.h>
    #include <string.h>
    #include <limits.h> /* ULONG_MAX etc. */

    /* ======================= */
    /* reverse string in place */
    size_t revstring(char *stg)
    {
    char *last, temp;
    size_t lgh;

    lgh = strlen(stg);
    if (lgh > 1) {
    last = stg + lgh; /* points to '\0' */
    while (last-- > stg) {
    temp = *stg; *stg++ = *last; *last = temp;
    }
    }
    return lgh;
    } /* revstring */

    /* ============================================ */
    /* Mask and convert digit to hex representation */
    /* Output range is 0..9 and a..f only */
    int hexify(unsigned int value)
    {
    static char hexchars[] = "0123456789abcdef";

    return (hexchars[value & 0xf]);
    } /* hexify */

    /* ================================================== */
    /* convert unsigned number to string in various bases */
    /* 2 <= base <= 16, controlled by hexify() */
    /* Returns actual output string length */
    size_t basedisplay(unsigned long number, unsigned int base,
    char *stg, size_t maxlgh)
    {
    char *s;

    /* assert (stg[maxlgh]) is valid storage */
    s = stg;
    if (maxlgh && base)
    do {
    *s = hexify(number % base);
    s++;
    } while (--maxlgh && (number = number / base) );
    *s = '\0';
    revstring(stg);
    return (s - stg);
    } /* basedisplay */

    /* ================================================ */
    /* convert signed number to string in various bases */
    /* 2 <= base <= 16, controlled by hexify() */
    /* Returns actual output string length */
    size_t signbasedisplay(long number, unsigned int base,
    char * stg, size_t maxlgh)
    {
    char *s;
    size_t lgh;
    unsigned long n;

    s = stg; lgh = 0;
    n = (unsigned long)number;
    if (maxlgh && (number < 0L)) {
    *s++ = '-';
    maxlgh--;
    n = -(unsigned long)number;
    lgh = 1;
    }
    lgh = lgh + basedisplay(n, base, s, maxlgh);
    return lgh;
    } /* signbaseddisplay */


    /* ==================== */
    /* flush to end-of-line */
    int flushln(FILE *f)
    {
    int ch;

    while ('\n' != (ch = fgetc(f)) && (EOF != ch)) /* more */;
    return ch;
    } /* flushln */

    /* ========== END of generically useful routines ============ */

    /* ========================= */
    /* Prompt and await <return> */
    static void nexttest(char *prompt)
    {
    static char empty[] = "";

    if (NULL == prompt) prompt = empty;
    printf("\nHit return for next test: %s", prompt);
    fflush(stdout);
    flushln(stdin);
    } /* nexttest */

    /* ============================== */
    /* Display a value and its length */
    static void show(char *caption, int sz, char *stg)
    {

    if ((unsigned)sz != strlen(stg))
    printf("Something is wrong with the sz value\n");
    printf("%s: sz = %2d \"%s\"\n", caption, sz, stg);
    } /* show */

    /* =========== */
    /* exercise it */
    int main(void)
    {
    #define LGH 40
    #define VALUE 1234567890

    char stg[LGH];
    unsigned int base;
    int sz;

    printf("\nExercising basedisplay routine\n");
    printf("\nbase sz value\n");
    for (base = 2; base <= 16; base++) {
    sz = (int)basedisplay(VALUE, base, stg, LGH - 1);
    printf("%2d %2d %s\n", base, sz, stg);
    }

    nexttest("ULONG_MAX");
    for (base = 8; base <= 16; base++) {
    sz = (int)basedisplay(ULONG_MAX, base, stg, LGH - 1);
    printf("%2d %2d %s\n", base, sz, stg);
    }

    basedisplay(0, 10, stg, 3);
    printf("\nzero %s\n", stg);

    basedisplay(VALUE, 10, stg, 3);
    printf("3 lsdigits only, base 10 %s\n", stg);

    printf("\nBad calls:\n");

    sz = (int)basedisplay(VALUE, 10, stg, 0);
    show("0 length field", sz, stg);

    sz = (int)basedisplay(VALUE, 1, stg, 20);
    show("base 1, lgh 20", sz, stg);

    sz = (int)basedisplay(VALUE, 0, stg, 20);
    show("base 0, lgh 20", sz, stg);

    sz = (int)signbasedisplay(-1234, 10, stg, 0);
    show("0 lgh fld, -ve", sz, stg);

    sz = (int)signbasedisplay(-1234, 10, stg, 2);
    show("truncate -1234", sz, stg);

    nexttest("System limits");

    sz = (int)signbasedisplay(SCHAR_MIN, 10, stg, 20);
    show("SCHAR_MIN ", sz, stg);

    sz = (int)signbasedisplay(SCHAR_MAX, 10, stg, 20);
    show("SCHAR_MAX ", sz, stg);

    sz = (int)signbasedisplay(UCHAR_MAX, 10, stg, 20);
    show("UCHAR_MAX ", sz, stg);

    sz = (int)signbasedisplay(CHAR_MIN, 10, stg, 20);
    show("CHAR_MIN ", sz, stg);

    sz = (int)signbasedisplay(CHAR_MAX, 10, stg, 20);
    show("CHAR_MAX ", sz, stg);

    sz = (int)signbasedisplay(MB_LEN_MAX, 10, stg, 20);
    show("MB_LEN_MAX ", sz, stg);

    sz = (int)signbasedisplay(SHRT_MIN, 10, stg, 20);
    show("SHRT_MIN ", sz, stg);

    sz = (int)signbasedisplay(SHRT_MAX, 10, stg, 20);
    show("SHRT_MAX ", sz, stg);

    sz = (int)signbasedisplay(USHRT_MAX, 10, stg, 20);
    show("USHRT_MAX ", sz, stg);

    sz = (int)signbasedisplay(INT_MIN, 10, stg, 20);
    show("INT_MIN ", sz, stg);

    sz = (int)signbasedisplay(INT_MAX, 10, stg, 20);
    show("INT_MAX ", sz, stg);

    sz = (int)signbasedisplay(INT_MAX, 10, stg, 20);
    show("INT_MAX ", sz, stg);

    sz = (int) basedisplay(UINT_MAX, 10, stg, 20);
    show("UINT_MAX ", sz, stg);

    sz = (int)signbasedisplay(LONG_MIN, 10, stg, 20);
    show("LONG_MIN ", sz, stg);

    sz = (int)signbasedisplay(LONG_MAX, 10, stg, 20);
    show("LONG_MAX ", sz, stg);

    sz = (int) basedisplay(ULONG_MAX, 10, stg, 20);
    show("ULONG_MAX ", sz, stg);

    nexttest("DONE");
    return 0;
    } /* main */

    --
    Chuck F (cbfalconer at maineline dot net)
    Available for consulting/temporary embedded and systems.
    <http://cbfalconer.home.att.net>



    --
    Posted via a free Usenet account from http://www.teranews.com
     
    CBFalconer, Aug 30, 2007
    #9
  10. Tor Rustad Guest

    wrote:
    > hello
    > im programming in c.i have to write about 100 hexadecimal values in to
    > a file. how do i do it?pls help me


    I guess you want to write binary data as a hex string...


    void write_hex(FILE *out, unsigned char *binary, size_t binary_len)
    {
    size_t i;

    for (i=0; i<binary_len; i++)
    fprintf(out, "%02X", (int)binary);
    }

    --
    Tor <torust [at] online [dot] no>
     
    Tor Rustad, Aug 31, 2007
    #10
  11. On Fri, 31 Aug 2007 17:23:10 +0200, Tor Rustad
    <> wrote:

    > wrote:
    >> hello
    >> im programming in c.i have to write about 100 hexadecimal values in to
    >> a file. how do i do it?pls help me

    >
    >I guess you want to write binary data as a hex string...
    >
    >
    >void write_hex(FILE *out, unsigned char *binary, size_t binary_len)
    >{
    > size_t i;
    >
    > for (i=0; i<binary_len; i++)
    > fprintf(out, "%02X", (int)binary);


    The cast should not be necessary.

    >}



    Remove del for email
     
    Barry Schwarz, Sep 1, 2007
    #11
  12. Barry Schwarz <> writes:
    > On Fri, 31 Aug 2007 17:23:10 +0200, Tor Rustad
    > <> wrote:
    >> wrote:
    >>> hello
    >>> im programming in c.i have to write about 100 hexadecimal values in to
    >>> a file. how do i do it?pls help me

    >>
    >>I guess you want to write binary data as a hex string...
    >>
    >>
    >>void write_hex(FILE *out, unsigned char *binary, size_t binary_len)
    >>{
    >> size_t i;
    >>
    >> for (i=0; i<binary_len; i++)
    >> fprintf(out, "%02X", (int)binary);

    >
    > The cast should not be necessary.
    >
    >>}


    Personally, I'd cast it to unsigned rather than to int.

    The "%02X" format requires an unsigned arguments. 'binary' is of
    type unsigned char, which will normally promote to signed int (but it
    could promote to unsigned int if sizeof(int)==1, which implies
    CHAR_BIT>=16).

    An int argument (as long as it's non-negative) *should* be acceptable
    when an unsigned int is expected. I don't remember off the top of my
    head whether the standard explicitly guarantees this or just says in a
    footnote that it's intended to work.

    This is one of the rare cases where I'd be confortable with a cast,
    but to unsigned int, not to int.

    --
    Keith Thompson (The_Other_Keith) <http://www.ghoti.net/~kst>
    San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
    "We must do something. This is something. Therefore, we must do this."
    -- Antony Jay and Jonathan Lynn, "Yes Minister"
     
    Keith Thompson, Sep 1, 2007
    #12
  13. Tor Rustad Guest

    Barry Schwarz wrote:
    > On Fri, 31 Aug 2007 17:23:10 +0200, Tor Rustad
    > <> wrote:


    [...]

    >> void write_hex(FILE *out, unsigned char *binary, size_t binary_len)
    >> {
    >> size_t i;
    >>
    >> for (i=0; i<binary_len; i++)
    >> fprintf(out, "%02X", (int)binary);

    >
    > The cast should not be necessary.


    The cast should be (unsigned int).

    I don't use energy on whether it's needed or not, it's just old habit to
    put the cast there, to get a lint clean compile.


    --
    Tor <torust [at] online [dot] no>
     
    Tor Rustad, Sep 1, 2007
    #13
    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. Victor Hannak
    Replies:
    0
    Views:
    7,501
    Victor Hannak
    Feb 20, 2004
  2. Bengt Richter

    Hexadecimal Conversion in Python

    Bengt Richter, Nov 2, 2005, in forum: Python
    Replies:
    10
    Views:
    51,348
    Peter Hansen
    Nov 2, 2005
  3. lei
    Replies:
    10
    Views:
    799
    Don Roby
    Dec 30, 2006
  4. hexadecimal to float conversion

    , Aug 19, 2005, in forum: C Programming
    Replies:
    4
    Views:
    1,792
    Keith Thompson
    Aug 20, 2005
  5. Replies:
    14
    Views:
    1,063
    Simon Biber
    Nov 16, 2006
Loading...

Share This Page