需要在 C 或 C++ 中为微控制器显示驱动程序进行不寻常的字符串连接

Need for unusual string concatenation in C or C++ for microcontroller display driver

我正在为 Dean Reading 的“SevSeg" display driver for 7-segment displays 添加字符串和文本支持,由 Arduino 控制,我需要一些帮助。

由于显示器的限制,我必须创建特殊情况,即显示器上的两个数字用于显示一个字符。例如:"M" 必须被视为一种特殊情况,因为一个显示数字不能自己创建一个 M。

我基本上需要的是让用户能够编写如下内容:

char myString[] = "Help Me Do This!";

除了我希望他们能够指定是否要使用特殊 M(称为 "PSEUDO_M")。如果他们按原样保留上面的短语,则 M 将被替换为破折号,我不想禁止这种行为,因为用户可能希望该短语适合一组显示数字,而不是他们想要的2位数的M,反正我要的是这样的:

const char PSEUDO_M = -128;

char myString[] = "Help " + PSEUDO_M + "e Do this!";
//OR perhaps:
char myString[] = "Help [PSEUDO_M]e Do this!"; 

然后我会处理他们的输入字符串,将 PSEUDO_M (dec -128) 视为特例。

显然,上面添加的字符串在 C 中不起作用。

我知道字符串只是一个字符数组,所以当用户创建一个字符串时,上面的字符十进制表示(使用 PSEUDO_M [-128] 代替 M [ 77]) 将是:

char myString[] = {72, 101, 108, 112, 32, -128, 101, 32, 68, 111, 32, 84, 104, 105, 115, 33, 0};

但是,上面的数字数组不是人类可读的。 *这个想法是用户本质上使用标准字符键入字符串文字。那么,编写宏、函数或其他可以轻松让某人键入要在字符串中使用的短语但 M's (dec 77) 将被替换为 PSEUDO_M's 的东西的最佳方式是什么(dec -128), if 用户需要它?*

注意: 理想情况下,我使用的技术不会占用 char 数组中的任何额外字节,因为我的 PSEUDO_M 可以简单地表示为单个字符(dec -128).

请注意,在 C 中,编译器会将多个按顺序排列的字符文字连接起来;例如,"foo" "bar""foobar" 相同。

使用这个和定义,您可以获得人类可读的语法,同时仍具有零运行时开销。

#define PSEUDO_M "\xAB" // Replace AB with the appropriate code

char myString[] = "Help " PSEUDO_M "e Do this!";