复习:十六进制转换成十进制算法

时间:2024-03-18 09:45:03

在计算机中的内存地址往往都是用十六制来表示的,在学习如汇编、windbg之类的技术时也往往被这些十六进制数据搞晕,不便于学习,所以我们要练就一身好本领:快速把十六进制数转换为我们容易理解的十进制数

计算方法如下:

设H为待转化的十六制数,H的位数为N,H[i](0<=i<=N)为H中的各数字(如:H=0x89AF 的N为3,H[0]=F,H[1]=A,H[2]=9,H[3]=8),转换为十进制的数为:

D = H[0]*16^(0) + H[1]*16^(1) + … + H[N]*16^(N) = H[0] + H[1]*16 + … + H[N]*16^(N)

示例:

0x12 = 2 + 1*16 = 18

0xAB = B + A*16 = 11 + 10*16 = 171

0x8A = A + 8 * 16 = 10 + 8*16 = 138

0x121 = 1 + 2*16 + 1 * 256 = 289

0xABC = C + B*16 + A*256 = 12 + 11*16 + 10*256 = 2748

0x8F9 = 9 + F*16 + 8 * 256 = 9 + 15*16 + 256 * 8 = 2297

为了快速计算、心算,需要记住一下常见的乘法计算,如:

16*16 = 256,15*16 = 240,14*16 = 224,。。。

1*256 = 256,2*256 = 512,3*256 = 768,4*256 = 1024,。。。

16^2 = 256,16^3=4096

就像记99乘法表那样,这样在遇到内存地址时就不会感到陌生了