【发布时间】:2018-06-19 13:51:57
【问题描述】:
现在我有一个 char 数组,我用它来存储字体数据:
const char * const FONT[] = {
"\x48" "a44448", //0
"\x27" "m\x48" "m\x40", //1
"\x06" "a46425" "m\x00" "m\x80", //2
"\x06" "a46425" "a42425", //3
"\x83" "m\x03" "m\x68" "m\x60", //4
"\x88" "m\x08" "m\x04" "m\x44" "a42424" "m\x00", //5
"\x02" "a42428" "a84842", //6
"\x08" "m\x88" "m\x20", //7
"\x44" "A46428" "a42428", //8
"\x86" "a46428" "m\x60", //9
...
有没有办法以更易读的方式编写它,但仍然在编译时计算它? 例如,类似:
#define start(x,y) //somehow create '\x<x><y>'. start(3,4) -> '\x34'
#define arc(x,y,rx,ry,a) //evaluate to {'a','<x>','<y>','<rx>','<ry>','<a>'}. arc(1,2,3,4,5) -> {'a','1','2','3','4','5'}
const char * const FONT[] = {
start(4,8) arc(4,4, 4,4, 8) "", //somehow concatenate them
...
另外,为什么我可以使用字符串文字而不是 char 数组文字: (这不起作用)
const char * const FONT[] = {
{'\x48','a','4','4','4','4','8','\0'}, //0
但这有效:
const char X[] = {'\x48','a','4','4','4','4','8','\0'};
const char * const FONT[] = {
X,
...
【问题讨论】:
-
(这不起作用)是因为你想要
char [][]而不是char *[]。 -
@EugeneSh。我试过了,但它说我必须给第二个维度的大小。但是数组的长度都不同,所以我不能这样做。
-
你可以给它最大可能。
-
是的,"" 有点小技巧,因为编译器会为你分配内存,然后你定义一个指向字符串的指针数组。你不能用 {1,2,3} 符号来做到这一点。您必须分别定义每个字符,然后像使用
X[]一样构建一个数组指针。 -
请注意,
'\x48'与0x48相同。这可以为您省去一些麻烦。