C - 二进制和十六进制表示之间的快速转换

时间:2012-02-14 16:46:04

标签: c math bit-manipulation representation

读取或编写C代码时,我常常难以将数字从二进制转换为十六进制表示并返回。通常,在低级编程中经常使用不同的掩码,如0xAAAA5555,但很难识别它们所代表的特殊位模式。是否有任何易于记忆的规则如何在脑海中快速完成?

3 个答案:

答案 0 :(得分:8)

每个十六进制数字映射精确地位于4位,我通常记住每个位的8421权重,所以即使是记住转换也很容易做到,即

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

记住 8-4-2-1 权重。

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

答案 1 :(得分:3)

我总觉得很容易将HEX映射到BINARY数字。由于每个十六进制数字可以直接映射到四位二进制数,您可以想到:

> 0xA4 

作为

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

答案 2 :(得分:0)

通过将基数10表示除以2并以相反顺序对余数进行串联来计算转换。我在脑子里这样做,似乎有效。

所以你说0xAAAA5555看起来像什么

我只是通过做

来计算出看起来像A和5的样子
A = 10

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

所以我知道A看起来像1010(注意4个手指是记住余数的好方法!)

你可以将4位的块串起来,所以AA是1010 1010.要将二进制转换回十六进制,我总是通过总结2的幂来再次通过基数10.你可以通过形成4位的块来做到这一点(用0填充)并将结果字符串。

所以111011101 0001 1101 1101(1) (1 + 4 + 8) (1 + 4 + 8) = 1 13 131DD