这些天我在C身上生锈了。
我知道如何在char *数组中创建字符串列表,但有没有办法重新映射列表,以便第一个字符串索引为1,第二个字符串索引为5?
以下是我试图使用它的方式......
我有一个时钟程序,它在结构中将AM / PM值返回为0x00或0x40 myclockTimeStruct.RTC_H12
(使用STM32f4xx芯片)。我有一个char* AM_PM= {"AM","PM"};
变量。
我不想做我正在做的陈述。理想情况下,我想将PM重新索引到位置0x40,以便在读取代码时变得更加流式化。
我似乎记得它可以做到,但我不记得我在哪里看到它。也许这是我想到的另一件事?我想我总是可以在括号中加入63个逗号,但我认为它可以用不同的方式完成。
答案 0 :(得分:2)
这就是我认为你要求的。其他建议也很好。
char * AM_PM[0x40+1] = { "AM", [0x40] = "PM" };
答案 1 :(得分:1)
您可以使用
AM_PM[rtc_h12 == 0x40 ? 1 : 0]
(这可以改写为更短,但IMO不太可读。)
答案 2 :(得分:1)
我建议做
AM_PM[rtc_h12 >> 6]
也就是说,有效地除以0x40
给出0
或1
,它们可以索引到原始的双元素数组中。
如果有任何疑问rtc_h12
可以返回除0
或0x40
以外的任何内容,那么您可以
AM_PM[(rtc_h12 << 6) & 1]
屏蔽低位,从而保证只获得0
或1
。