Я хотел бы скрывать строки во время компиляции. Я знаю, что это можно сделать в других препроцессорах, но я не нашел способа сделать это с помощью препроцессора C.Может ли препроцессор C обрабатывать строковые символы char?
ответ
Ну, вы можете это сделать, но это некрасиво.
#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 с 0x20 не является хорошей функцией, чтобы скрыть вашу строку. И, конечно же, вам нужно будет #define макрос для каждой длины строки.
Очевидно, что это не лучшее решение. Метапрограммирование шаблонов C++ было бы лучше. Вы также можете написать все свои строки в отдельном машиночитаемом файле и написать отдельную программу, которая анализирует это, затеняет строки любым способом, который вы считаете нужным, и выводит все это на .h/.c. Оба эти решения лучше, чем это.
Нет, препроцессор C не имеет возможности индексировать строки, как вы предлагаете.
Из любопытства, какие другие препроцессоры вы использовали, которые могут это сделать?
Нет, предварительный процессор C не может обрабатывать символы строк по символам.
У вас есть идентификаторы или строки в виду, во всяком случае? Вы можете много сделать с идентификаторами с фиксированными сопоставлениями (то есть, если вы знаете имя1, вы можете указать фиксированное сопоставление для xq23), но вы не можете алгоритмически находить идентификаторы, а затем создавать для них сопоставление.
Нет, я не могу придумать никакого способа сделать это с препроцессором.
Этот связанный с этим вопрос может помочь вам, хотя: How to hide a string in binary code?
- 1. C строковые и шестнадцатеричные символы
- 2. Как обрабатывать строковые символы iOS в узле (японские символы)?
- 3. Может ли препроцессор C выполнять целочисленную арифметику?
- 4. Попытка удалить строковые символы
- 5. Как мне обрабатывать строковые аргументы в C++?
- 6. Имеется ли препроцессор C#?
- 7. Строковые литералы vs const char * in C
- 8. Weka, SimpleKMeans не может обрабатывать строковые атрибуты
- 9. Заменить повторяющиеся строковые символы
- 10. Перечислить строковые символы таблицы
- 11. Может ли интерпретатор llvm обрабатывать исключение C++?
- 12. Работает ли многопроходный препроцессор C?
- 13. Может ли препроцессор указать, включен ли SystemVerilog?
- 14. Как обрабатывать char ** в C#
- 15. Может ли C-программа обрабатывать исключения C++?
- 16. C препроцессор Удалить Запятая
- 17. Препроцессор C#
- 18. C# 4.0 - Как обрабатывать Опциональные строковые
- 19. C++ char возвращает выходные символы
- 20. C char array, странные символы
- 21. C: Символы в массиве char
- 22. Строковые уникальные символы
- 23. Как обрабатывать строковые переменные как действительный код?
- 24. C: обрабатывать неопределенные символы в общем объекте
- 25. Может ли RoR обрабатывать поля char (1) как «логические» поля?
- 26. Как заменить строковые символы на C#
- 27. C препроцессор макроподстановка
- 28. Может ли C++ tcpserver получать unsigned char?
- 29. C++: может ли int присваиваться символ char *?
- 30. Может ли препроцессор C# смотреть на постоянные значения строк?
Не компилируется на gcc, пробовал различные параметры -std =. –