进制转换器运用剖析:
合计机业余的学生以及喜爱软件逆向工程的喜爱者都知道,浮点数在合计机外部是接管十六进制的方式存储的。接管的是ieee 二进位浮点数算术尺度(ieee 754),为良多cpu 与浮点运算器所接管。而当初零星带的合计器却不这个功能,以是写了这个小工具。此外也搜罗了10 进制16 进制交流的功能。
用十六进制展现浮点数的措施
在二进制文件中,存储数据的格式为16进制,
下面举例剖析27.0f在二进制文件中奈何样展现。
float合计32位,折合4字节由最高到最低位分说是第3一、30、2九、……、0位31位是标志位,1展现该数为负,0反之。30-23位,一共8位是指数位。22-0位,一共23位是尾数位。每一8位分为一组,分成4组,分说是A组、B组、C组、D组。每一组是一个字节,在内存中逆序存储,即:DCBA
27.0展现成二进制为:11011.0
用迷信计数法展现为1.110110*2^4,如今咱们要的尾数以及指数都进去了。
尾数为:1101 10 (删除了前面的第一个1,由于用迷信计数法展现,二进制中第一个永世都为1,合计机在存储的时候就不存储这个1,只存储小数点前面的位数) 缺少23位,补0,便是1011 0000 0000 0000 0000 000(23位)
指数:为4 。一共8位,可能展现规模是0 ~ 255的无标志整数,也可能展现-128~127的有标志整数。但由于指数是可以为负的,所以为了不同把十进制的整数化为二进制时,都先加之127。
以是:4+127=131 酿成二进制便是10000011
27.0用二进制展现便是:
加之第31位的标志位0
便是0100 0001 1101 1000 0000 0000 0000 0000
十六进制便是:41 D8 00 00
再看一个数27.5,二进制为11011.1
1.10111*2^4
尾数(小数点后的数)10111,补够23位 1011 1000 0000 0000 0000 000
指数:4,加之127,便是131,二进制1000 0011
用二进制展现便是 (标志数位1位)0 (指数位8位)1000 0011 (尾数位23位)1011 1000 0000 0000 0000 000
写成二进制尺度方式:0100 0001 1101 1100 0000 0000 0000 0000
写成16进制便是41 DC 00 00