題目是六行浮點數,百度之后才明白這道題的考點是出在計算機保存浮點數的問題上
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 指向的內容即可
其他幾個浮點數同理。