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