Hex to ASCII in c

15,926

This is not an answer but an observation - using this since it formats code

static char lookup[] = { '0', '1', '2','3','4','5','6','7','8','9','A','B','C','D','E','F' };
int j = 0;
for (i=0; i<ArraySize; ++i)
{
   loc[j++] = lookup[(Tmp[i] & 0xf0) >> 4];
   loc[j++] = lookup[Tmp[i] & 0xf];
}
loc[j] = 0;

makes the code a lot quicker and simpler.

Share:
15,926
QMG
Author by

QMG

Updated on June 04, 2022

Comments

  • QMG
    QMG almost 2 years

    Here is my logic, to convert HEX to ASCII conversion in C:

    for (i=0;i<ArraySize;i++)
        {
            /*uses a bitwise AND to take the top 4 bits from the byte,
             0xF0 is 11110000 in binary*/
            char1 = Tmp[i] & 0xf0;
            char1 = char1 >> 4;
            /*bit-shift the result to the right by four bits (i.e. quickly divides by 16)*/
            if (char1 >9)
            {
                char1 = char1 - 0xa;
                char1 = char1 + 'A';
            }
            else
            char1 = char1 + '0';
            Loc[j]=char1;
            j++;
            /*means use a bitwise AND to take the bottom four bits from the byte,
            0x0F is 00001111 in binary*/
            char1 = Tmp[i] & 0x0f;
            if (char1 >9)
            {
                char1 = char1 - 0xa;
                char1 = char1 + 'A';
            }
            else
            char1 = char1 + '0';
            Loc[j]=char1;
            j++;
            Loc[j]=0;
        }
    

    Temp and Loc are string buffers. Defined and has data. It is not working properly. I am reading data in temp from some file (sample fread). It stop reading file at particular point. If I change first

    0xf0

    to

    0x0f

    Here is how file is being read:

    BytesRead = fread (Tmp,1,Bytes,PrcFile);
    

    Then it reads whole file. I am not able to find what is missing. Can you please help me in this regards. Thanks