我希望这不是一个愚蠢的问题,但是我想在C中创建一个名为" Hello World"的char *,只使用一个double。我想通过滥用类型混淆来做到这一点,所以在一个文件中我可能有这样的东西:
char test[12];
int main() {
printf("%s\n", test);
}
在另一个档案中,我有这个:
double test = some_random_double;
因此,我的问题是选择一个双重转换为Ascii字符串" Hello World"。
有什么建议吗?我以为我会倒退并将ascii字符串转换为十六进制或二进制,然后尝试将所述十六进制/二进制转换为浮点格式,但我无法弄清楚如何这样做。
答案 0 :(得分:1)
为此,您需要一个包含2个双打的数组。
您可以使用此代码确定值:
#include <stdio.h>
#include <string.h>
int main(void) {
char msg[sizeof(double) * 2] = "Hello World";
double d[2];
memcpy(d, msg, sizeof(d));
printf("double test[2] = { %.20lg, %.20lg };\n", d[0], d[1]);
return 0;
}
在我的笔记本电脑上执行它会产生:
double test[2] = { 2.1914441197069634153e+228, 3.2516248670450380385e-317 };