0

所以这些天我对C很生疏。

我知道如何在 char* 数组中创建字符串列表,但是有没有办法重新映射列表,以便第一个字符串被索引为 1,第二个字符串被索引为 5?

这是我尝试使用它的方式...

我有一个时钟程序,它在myclockTimeStruct.RTC_H12结构内将 AM/PM 值返回为 0x00 或 0x40(使用 STM32f4xx 芯片)。我有一个char* AM_PM= {"AM","PM"};变量。

我不想做我目前正在做的 if 语句。理想情况下,我想将 PM 重新索引到位置 0x40,以便在阅读代码时它变得更加流线化。

我似乎记得它可以完成,但我不记得我在哪里看到它。也许这是我在想的不同的事情?我想我总是可以将 63 个逗号放在括号中,但我认为它可以做得不同。

4

3 回答 3

2

这就是我认为你所要求的。其他的建议也不错。

char * AM_PM[0x40+1] = { "AM", [0x40] = "PM" };
于 2013-11-09T20:09:32.297 回答
1

你可以使用

AM_PM[rtc_h12 == 0x40 ? 1 : 0]

(这可以重写为更短,但 IMO 可读性较差。)

于 2013-11-09T20:07:02.360 回答
1

我建议做

AM_PM[rtc_h12 >> 6]

也就是说,通过0x40给出其中一个01哪个可以索引到您的原始二元素数组中来有效地划分。

如果有任何疑问rtc_h12可以返回除0或之外的任何内容,0x40那么您可以做

AM_PM[(rtc_h12 << 6) & 1]

屏蔽低位,从而保证只得到0or 1

于 2013-11-09T20:22:56.153 回答