How to convert binary int array to hex char array?

时间:2016-02-03 02:50:28

标签: c arrays binary hex

Say I have a 32 bit long array of 32 binary digits and I want to output that in Hex form. How would I do that? this is what I have right now but it is too long and I don't know how to compare the 4 binary digits to the corresponding hex number

This is what I have right now where I break up the 32 bit number into 4 bit binary and try to find the matching number in binaryDigits

char hexChars[16] ={'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'};
char * binaryDigits[16] = {"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"};

int binaryNum[32]= {'0','0','1','0','0','0','0','1','0','0','0','0','1','0','0','1','0','0','0','0','0','0','0','0','0','0','0','0','1','0','1','0'};
int currentBlock, hexDigit;
int a=0, b=1, i=0;
while (a<32)
{
    for(a=i+3;a>=i;a--)
    {
        current=binaryNum[a];
        temp=current*b;
        currentBlock=currentBlock+temp;
        b*=10;
    }
    i=a;

    while(match==0)
    {
        if(currentBlock != binaryDigits[y])
            y++;
        else
        {
            match=1;
            hexDigit=binaryDigits[y];
            y=0;
            printf("%d",hexDigit);
        }
    }
}

printf("\n%d",currentBlock);

1 个答案:

答案 0 :(得分:1)

I apologize if this isn't the crux of your issue, but you say

I have a 32 bit long array of 32 binary digits

However, int binaryNum[32] is a 32-integer long array (4 bytes per int, 8 bits per byte = 4 * 8 * 32 which is (1024 bits)). That is what is making things unclear.

Further, you are assigning the ASCII character values '0' (which is 0x30 hex or 48 decimal) and '1' (0x31, 49) to each location in binaryNum. You can do it, and do the gymnastics to compare each value to actually form a

32 bit long array of 32 binary digits

but if that is what you have, why not just write it that way? (as a binary constant). That will give you your 32-bit binary value. For example:

#include <stdio.h>

int main (void) {

    unsigned binaryNum = 0b00100001000010010000000000001010;

    printf ("\n binaryNum : 0x%8x  (%u decimal)\n\n", binaryNum, binaryNum);

    return 0;
}

Output

$ ./bin/binum32

 binaryNum : 0x2109000a  (554237962 decimal)

If this is not where your difficulty lies, please explain further, or again, just what you are trying to accomplish.