[AFCTF2018]MagicNum

题目是六行浮点数,百度之后才明白这道题的考点是出在计算机保存浮点数的问题上

72065910510177138000000000000000.000000
71863209670811371000000.000000
18489682625412760000000000000000.000000
72723257588050687000000.000000
4674659167469766200000000.000000
19061698837499292000000000000000000000.000000

这是出题人的代码

#include <stdio.h>
char flag[]="afctf{sec_is_everywhere}";

int main()
{
	for(int i=0;i<6;++i){
		printf("%20f\n",*(float*)(flag+i*4));
	}
	return 0;
}

  

所以我们要做的就是将浮点数恢复成二进制

直接用c写

#include <stdio.h>

int main()
{   float i = 72065910510177138000000000000000.000000; 
	char *p = &i;
	printf("%c\n",*(p));
	printf("%c\n",*(p+1));
	printf("%c\n",*(p+2));
	printf("%c\n",*(p+3));
	return 0;
}

  

将浮点数赋值给变量 i

然后把i的地址赋值给指针p

直接输出指针p 指向的内容即可

扫描二维码关注公众号,回复: 9930881 查看本文章

 其他几个浮点数同理。

猜你喜欢

转载自www.cnblogs.com/p201721410013/p/12518254.html