在C

时间:2016-02-28 02:27:01

标签: c

我希望这不是一个愚蠢的问题,但是我想在C中创建一个名为" Hello World"的char *,只使用一个double。我想通过滥用类型混淆来做到这一点,所以在一个文件中我可能有这样的东西:

char test[12];    
int main() {
    printf("%s\n", test);
}

在另一个档案中,我有这个:

double test = some_random_double;

因此,我的问题是选择一个双重转换为Ascii字符串" Hello World"。

有什么建议吗?我以为我会倒退并将ascii字符串转换为十六进制或二进制,然后尝试将所述十六进制/二进制转换为浮点格式,但我无法弄清楚如何这样做。

1 个答案:

答案 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 };