C 预处理器能够逐字符处理字符串吗?

2024-03-10

我想在编译时隐藏字符串。我知道它可以在其他预处理器中完成,但我还没有找到一种方法来做到这一点C预处理器。


好吧,你可以做到,但它很难看。

#define ENCODE_STRING_14(str) {\
            str[0] ^ 0x020,\
            str[1] ^ 0x020,\
            str[2] ^ 0x020,\
            str[3] ^ 0x020,\
            str[4] ^ 0x020,\
            str[5] ^ 0x020,\
            str[6] ^ 0x020,\
            str[7] ^ 0x020,\
            str[8] ^ 0x020,\
            str[9] ^ 0x020,\
            str[10] ^ 0x020,\
            str[11] ^ 0x020,\
            str[12] ^ 0x020,\
            '\0'\
            }

void Decode( char *str, int length )
{
    for( int i = 0; i < length - 1; ++i )
    {
        str[i] ^= 0x20;
    }
}

char hello[] = ENCODE_STRING_14("Hello, World!");

int main()
{
    printf("%s\n", hello);
    Decode( hello, 14 );
    printf("%s\n", hello);
    return 0;
}

已编译有优化在 VS2005 中,该字符串在可执行文件中存储为“hELLO\x0C\0wORLD\x01”。现在,显然,与 0x20 进行异或并不是隐藏字符串的好函数。当然,您必须为每个字符串长度#define 一个宏。

显然,这不是最好的解决方案。 C++ 模板元编程会更适合。您还可以将所有字符串写入一个单独的机器可读文件中,并编写一个单独的程序来解析该文件,以您认为合适的任何方式模糊字符串并将其全部输出到 .h/.c 中。这两个都是比这更好的解决方案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 预处理器能够逐字符处理字符串吗? 的相关文章

随机推荐