简体   繁体   中英

C - Fast conversion between binary and hex representations

Reading or writing a C code, I often have difficulties translating the numbers from the binary to the hex representations and back. Usually, different masks like 0xAAAA5555 are used very often in low-level programming, but it's difficult to recognize a special pattern of bits they represent. Is there any easy-to-remember rule how to do it fast in the mind?

Each hex digit map exactly on 4 bit, I usually keep in mind the 8421 weights of each of these bits, so it is very easy to do even an in mind conversion ie

A = 10 = 8+2 = 1010 ... 5 = 4+1 = 0101

just keep the 8-4-2-1 weights in mind.

A        5     
8+4+2+1  8+4+2+1
1 0 1 0  0 1 0 1

I always find easy to map HEX to BINARY numbers. Since each hex digit can be directly mapped to a four digit binary number , you can think of:

> 0xA4 

As

> b 1010 0100
>   ---- ---- (4 binary digits for each part)
>     A    4

The conversion is calculated by dividing the base 10 representation by 2 and stringing the remainders in reverse order. I do this in my head, seems to work.

So you say what does 0xAAAA5555 look like

I just work out what A looks like and 5 looks like by doing

A = 10

10 / 2 = 5 r 0 
 5 / 2 = 2 r 1
 2 / 2 = 1 r 0
 1 / 2 = 0 r 1

so I know the A's look like 1010 (Note that 4 fingers are a good way to remember the remainders!)

You can string blocks of 4 bits together, so AA is 1010 1010. To convert binary back to hex, I always go through base 10 again by summing up the powers of 2. You can do this by forming blocks of 4 bits (padding with 0s) and string the results.

so 111011101 is 0001 1101 1101 which is (1) (1 + 4 + 8) (1 + 4 + 8) = 1 13 13 which is 1DD

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM