gpt4 book ai didi

c - C 预处理器是否能够逐个字符地处理字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 02:20:12 25 4
gpt4 key购买 nike

我想在编译时隐藏字符串。我知道它可以在其他预处理器中完成,但我还没有找到使用 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”。现在,显然,xor with 0x20 不是隐藏字符串的好函数。当然,您必须为每个字符串长度 #define 一个宏。

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

关于c - C 预处理器是否能够逐个字符地处理字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1381818/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com