1

我有 4 个数组,每个数组都有不同数量的条目。所有这些数组都收集在另一个数组中。它是这样实现的:

ac 库中的代码

static const int32_t ONE_COLOR[2] = { RGB_BLACK, RGB_WHITE };


static const int32_t TWO_COLOR[4] = { RGB_WHITE, RGB_RED, RGB_GREEN, RGB_BLUE };


static const int32_t THREE_COLOR[8] = { RGB_BLACK, RGB_RED, RGB_GREEN, RGB_BLUE,
    RGB_CYAN, RGB_YELLOW, RGB_MAGENTA, RGB_WHITE };


static const int32_t FOUR_COLOR[16] = { RGB_WHITE, RGB_RED, RGB_GREEN, RGB_BLUE,
    RGB_CYAN, RGB_YELLOW, RGB_MAGENTA, RGB_DARK_RED, RGB_DARK_GREEN,
    RGB_DARK_BLUE, RGB_LIGHT_BLUE, RGB_LIGHT_GREEN, RGB_ORANGE, RGB_LIME,
    RGB_PINK, RGB_LILA };

static const int32_t* COLOR_ARRAY[4] = { ONE_COLOR, TWO_COLOR, THREE_COLOR,
    FOUR_COLOR };

例如,如何访问 COLOR_ARRAY[1][2]?谢谢你的帮助 :)

编辑 访问示例代码:

Arduino代码

for (i = 0; i < colorsLen; i++) {
            n = 0;
            for (j = 0; j < colorsWrite; j++) {
                    if (bitArray[i * colorsWrite + j] == 1) {
                            n |= 1 << (colorsWrite - 1 - j);

                    }
            }
            colors[i] = COLOR_ARRAY[colorsWrite - 1][n];
// testing access
//              colors[i] = ONE_COLOR[n];
//              colors[i] = n;
    }

colorsLen是数组的长度,colorscolorsWrite一种颜色可以传输的位数。

目的是通过光将数据从智能手机传输到 arduino 并返回。为了获得更多带宽,数据用颜色编码。colorsWrite定义colorsLen传输所有数据的大小。

4

2 回答 2

0

这一行:

n |= 1 << (colorsWrite - 1 - j);

n 至少为 1,因为 1<<0 = 1 ...您使用 n 作为索引,ONE_COLOR[n]因此您无法访问索引为零的颜色,即 RGB_BLACK。

于 2013-07-16T22:41:04.493 回答
0

好吧,从您的问题来看,您可以像这样访问 COLOR_ARRAY[1][2] 。所以该表达式中的 [1] 是:TWO_COLOR[],而 [2] 是:RGB_GREEN。所以你确实像以前一样访问了一个数组。

即: const COLOR clr = COLOR_ARRAY[1][2];

我可能会遗漏您问题的某些部分,但我希望它有所帮助或澄清。

问候, Øyvind

编辑 这个答案可能会给你一个指针 将静态数组定义为 C 或 C++ 源文件

于 2013-07-16T22:20:43.203 回答