繁体   English   中英

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

[英]C - Fast conversion between binary and hex representations

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

每个十六进制数字映射完全在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

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

> 0xA4 

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

通过将基数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位的块来实现这一点(填充与0s)并将结果串起来。

所以1110111010001 1101 1101 ,它是(1) (1 + 4 + 8) (1 + 4 + 8) = 1 13 13 ,即1DD

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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