题目是六行浮点数,百度之后才明白这道题的考点是出在计算机保存浮点数的问题上
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 指向的内容即可
其他几个浮点数同理。