C宏通过字符码生成字符串
C macro generating strings by character code
我正在使用一个游戏引擎,该引擎使用字符串中的转义码来执行设置颜色等命令。例如,要将颜色设置为红色,您可以编写 "Red text:\x81\xFF\x00\x00\xFFhello!"
(0x81, red, green, blue, alpha).
是否可以创建一个像 TEXT_COLOR(r,g,b,a)
这样的宏,以便 TEXT_COLOR(255,0,0,255)
扩展为 "\x81\xFF\x00\x00\xFF"
以用于常量字符串?
它需要在不同的宏中混合使用标记粘贴和字符串化,但是,是的,可以使用 base-16 数字:
#include <stdio.h>
#define TEXT_COLOR2(r,g,b,a) "\x81" #r #g #b #a
#define TEXT_COLOR(r,g,b,a) TEXT_COLOR2(\x ##r, \x ##g, \x ##b, \x ##a)
int main(void) {
char s[] = "Red text:" TEXT_COLOR(FF, 00, 00, FF) "hello!";
for (const char *c = s; c < s + sizeof(s); c++) {
printf("\x%02hhX", *c);
}
putchar('\n');
return 0;
}
我正在使用一个游戏引擎,该引擎使用字符串中的转义码来执行设置颜色等命令。例如,要将颜色设置为红色,您可以编写 "Red text:\x81\xFF\x00\x00\xFFhello!"
(0x81, red, green, blue, alpha).
是否可以创建一个像 TEXT_COLOR(r,g,b,a)
这样的宏,以便 TEXT_COLOR(255,0,0,255)
扩展为 "\x81\xFF\x00\x00\xFF"
以用于常量字符串?
它需要在不同的宏中混合使用标记粘贴和字符串化,但是,是的,可以使用 base-16 数字:
#include <stdio.h>
#define TEXT_COLOR2(r,g,b,a) "\x81" #r #g #b #a
#define TEXT_COLOR(r,g,b,a) TEXT_COLOR2(\x ##r, \x ##g, \x ##b, \x ##a)
int main(void) {
char s[] = "Red text:" TEXT_COLOR(FF, 00, 00, FF) "hello!";
for (const char *c = s; c < s + sizeof(s); c++) {
printf("\x%02hhX", *c);
}
putchar('\n');
return 0;
}