C Code Translation Example - Reply42.com

Translates an int, either ASCII to EBCDIC or vice versa.

Linda,

I needed a quick routine to convert EBCDIC to ASCII in "C" and discovered your page with Copernic. You may already be aware that the "C" demo on your web site is incomplete and even has a few problems that prevent it from compiling with Microsoft C/C++ version 6. I took the liberty of completing you code and have attached it to this note if you care to publish it.

I'll probably also place it in my freeware area at URL:
http://www3.sympatico.ca/n.rieck/links/cool_vax_vms.html#my_demos

Neil Rieck
Kitchener/Waterloo/Cambridge,
Ontario, Canada.
http://www3.sympatico.ca/n.rieck/

/***************************************************************
 * title   : EBCDIC-ASCII.c
 * author  : Neil Rieck (email: n.rieck@sympatico.ca)
 *         : http://www3.sympatico.ca/n.rieck/
 * created : v100 2002.02.14
 * modified: v101 2006.03.07 (code clean up)
 * notes   : derived from a partial web source at URL:
 * http://www.reply42.com/ascii_ebcdic_comp_3/
 ***************************************************************/

#include 
#include 

void    ASCII_to_EBCDIC ( long, char *) ;
void    EBCDIC_to_ASCII ( long, char *) ;

   /*
    *    ASCII to EBCDIC translation table
    */
    static char ASCII_translate_EBCDIC [ 256 ] =
    {
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
        0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
        0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
        0x40, 0x5A, 0x7F, 0x7B, 0x5B, 0x6C, 0x50, 0x7D, 0x4D,
        0x5D, 0x5C, 0x4E, 0x6B, 0x60, 0x4B, 0x61,
        0xF0, 0xF1, 0xF2, 0xF3, 0xF4, 0xF5, 0xF6, 0xF7, 0xF8,
        0xF9, 0x7A, 0x5E, 0x4C, 0x7E, 0x6E, 0x6F,
        0x7C, 0xC1, 0xC2, 0xC3, 0xC4, 0xC5, 0xC6, 0xC7, 0xC8,
        0xC9, 0xD1, 0xD2, 0xD3, 0xD4, 0xD5, 0xD6,
        0xD7, 0xD8, 0xD9, 0xE2, 0xE3, 0xE4, 0xE5, 0xE6, 0xE7,
        0xE8, 0xE9, 0xAD, 0xE0, 0xBD, 0x5F, 0x6D,
        0x7D, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88,
        0x89, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96,
        0x97, 0x98, 0x99, 0xA2, 0xA3, 0xA4, 0xA5, 0xA6, 0xA7,
        0xA8, 0xA9, 0xC0, 0x6A, 0xD0, 0xA1, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B,
        0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B, 0x4B } ;

   /*
    *    EBCDIC to ASCII translation table
    */
    static char EBCDIC_translate_ASCII [ 256 ] =
    {
        0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
        0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F,
        0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18,
        0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F,
        0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28,
        0x29, 0x2A, 0x2B, 0x2C, 0x2D, 0x2E, 0x2F,
        0x2E, 0x2E, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
        0x39, 0x3A, 0x3B, 0x3C, 0x3D, 0x2E, 0x3F,
        0x20, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x2E, 0x2E, 0x3C, 0x28, 0x2B, 0x7C,
        0x26, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x21, 0x24, 0x2A, 0x29, 0x3B, 0x5E,
        0x2D, 0x2F, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x7C, 0x2C, 0x25, 0x5F, 0x3E, 0x3F,
        0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x3A, 0x23, 0x40, 0x27, 0x3D, 0x22,
        0x2E, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68,
        0x69, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71,
        0x72, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x7E, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
        0x7A, 0x2E, 0x2E, 0x2E, 0x5B, 0x2E, 0x2E,
        0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x2E, 0x2E, 0x2E, 0x2E, 0x5D, 0x2E, 0x2E,
        0x7B, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48,
        0x49, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x7D, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51,
        0x52, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x5C, 0x2E, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
        0x5A, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E,
        0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38,
        0x39, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E, 0x2E } ;

/*
 *      EBCDIC_to_ASCII (string conversion)
 */
void    EBCDIC_to_ASCII ( long buf_length, char *buf_addr)
{   int i;
    unsigned char temp;
    for (i=0; i < buf_length; i++)
    {
        temp = (unsigned char) buf_addr[i];
        buf_addr[i] = EBCDIC_translate_ASCII[temp];
    }
}

/*
 *      ASCII_to_EBCDIC (string conversion)
 */
void    ASCII_to_EBCDIC ( long buf_length, char *buf_addr)
{   int i;
    unsigned char temp;
    for (i=0; i < buf_length; i++)
    {
        temp = (unsigned char) buf_addr[i];
        buf_addr[i] = ASCII_translate_EBCDIC[temp];
    }
}

/*                                                            */
/* Here's a sample of how to use these routines               */
/*                                                            */

void  main ( void )
{
    char in_buffer[255];
    int junk;

    printf("\nEBCDIC-ASCII.c\n");
    printf(  "==============\n");

    /* EBCDIC characters in the buffer: ,%_>?         */

    printf("The next 4 lines should match\n");

    strcpy(in_buffer, "\x6b\x6c\x6d\x6e\x6f\x00");
    printf("EBCDIC data: %s\n", &in_buffer);
    EBCDIC_to_ASCII ( sizeof ( in_buffer ), in_buffer ) ;
    printf("ASCII  data: %s\n\n", &in_buffer );

    strcpy(in_buffer, ",%_>?");
    printf("ASCII  data: %s\n", &in_buffer );
    ASCII_to_EBCDIC ( sizeof ( in_buffer ), in_buffer ) ;
    printf("EBCDIC data: %s\n\n", &in_buffer);

    /* EBCDIC characters in the buffer: ABCDE         */

    printf("The next 4 lines should match\n");

    strcpy(in_buffer, "\xc1\xc2\xc3\xc4\xc5\x00");
    printf("EBCDIC data: %s\n", &in_buffer);
    EBCDIC_to_ASCII ( sizeof ( in_buffer ), in_buffer ) ;
    printf("ASCII  data: %s\n\n", &in_buffer );

    strcpy(in_buffer, "ABCDE");
    printf("ASCII  data: %s\n", &in_buffer );
    ASCII_to_EBCDIC ( sizeof ( in_buffer ), in_buffer ) ;
    printf("EBCDIC data: %s\n\n", &in_buffer);

    printf("Hit  ... ");
    junk = getchar();
    printf("\nBye...\n");
} 

I'm an old retired dinosaur, but back in my day, and still in my day, as I learn some of the newer technologies, us computer geeks are nothing without our reference books. And just when you've mastered one technology, another technology comes along, requiring us too learn all over again. A class? Hah! If you're lucky. Otherwise, the hunt is on, for a good reference book. Much like you came to these code table pages. The boss requires you to do the job - even in the absence of adequate reference. Just the way it is, huh?

The best of the best, if you have to bet on a book ... Well, I'd bet on a nutshell book. Hence ...
Shop for Computer Geek Books are all Nutshell books.
I am sure I have half a dozen of these Nutshell books, around here, somewhere.

It really is awesome the geographic diversity that comes to these pages needing to do code translation. I've had emails from Singapore, Italy, Jordon, China, Argentina, and of course - my home country, the USA. The following are the categories of books visitors to this site are buying from:

Shop for Books on Algorithms

Shop for Books on Cisco Routers

Shop for Books on TCP/IP

Shop for Mike Meyers Network Books

Shop for Books on Network Troubleshooting

I threw in this last category of books "for Dummies", because sometimes all you need to know, is covered in these Dummies books. I was just called upon to do some mySQL. Okay fine, but I already know (or have had experience with) at least 5 other databases ... what 'cha want me to do? "GET" the data. "FIND" the data. I just needed the syntax for mySQL, not a entire course in database. My PHP & mySQL for dummies book served me fine.

Shop for HiTech Books for Dummies

 

ASCII to EBCDIC to BINARY Code Tables

ASCII EBCDIC BINARY code translation
ASCII EBCDIC BINARY code translation

Shop my favorite CD's, Books, and Movies.
Recommended favorites, are always better then a shot in the dark, huh?
--- Linda-reply42

Reply 42:  What about the 42?

Click Here to send me an Email / Feedback
Copyright © 1996-2006 by Linda Fisher. All rights reserved.

Presented by:
Reply42.com's Home

:::: Most Popular [all unrelated] :::: Basal Metabolism Calculator :::: Dec, Hex, ASCII, EBCDIC, Binary, Code Tables ::::
:::: Bipolar Essays :::: Our Pointing Labrador Retrievers :::: Garden Collaborations :::: Bear Paw Ranch Resort ::::
:::: Webmasters: Free Sticky Content ::::