【问题标题】:Changing the char *variable = {"1","2","3"} indexing更改 char *variable = {"1","2","3"} 索引
【发布时间】:2013-11-10 04:22:56
【问题描述】:

所以这些天我对 C 有点生疏了。

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

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

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

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

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

【问题讨论】:

  • 或者,左移 6 位?

标签: c indexing char


【解决方案1】:

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

char * AM_PM[0x40+1] = { "AM", [0x40] = "PM" };

【讨论】:

  • 就是这样!谢谢。
  • 为了避免每次访问都使用一条>>6 指令,这浪费了相当多的内存。
  • @R..,我同意,但这是他要求的语法。
【解决方案2】:

你可以使用

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

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

【讨论】:

  • 我忘记了那个方法......正如我所说的我生锈了。在“我知道我在做什么”之类的方式中,这很聪明。谢谢!
【解决方案3】:

我建议这样做

AM_PM[rtc_h12 >> 6]

也就是说,有效地除以0x40 得到01,它们可以索引到您的原始二元素数组中。

如果有任何疑问 rtc_h12 可以返回除 00x40 以外的任何内容,那么您可以这样做

AM_PM[(rtc_h12 << 6) & 1]

屏蔽低位,因此保证只得到01

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2013-08-22
    • 1970-01-01
    • 2012-03-08
    • 2021-10-21
    • 2010-09-20
    • 2021-11-15
    相关资源
    最近更新 更多