C++ 数组损坏其字符C++;

C++ 数组损坏其字符C++;,c++,arrays,arduino,arduino-uno,C++,Arrays,Arduino,Arduino Uno,我正在为Arduino编写一个小程序,它能够从十六进制颜色代码的字符数组中读取RGB值。让我举个例子,因为很难用不同的方式来解释: 例如,从arduino串行监视器I发送: /1FFFFF000000 第一个字符告诉Arduino,这将是十六进制颜色代码序列。第二个字符告诉它将有多少颜色代码(它以0开头。因此1表示两种颜色)。然后,它通过每个十六进制代码的六个字符进行循环,并将其添加到十六进制[]字符数组中相应的位置。十六进制[]数组是二维的,因为在第一个“维”中它有颜色的序列号,在第二个“维”

我正在为Arduino编写一个小程序,它能够从十六进制颜色代码的字符数组中读取RGB值。让我举个例子,因为很难用不同的方式来解释:

例如,从arduino串行监视器I发送:

/1FFFFF000000

第一个字符告诉Arduino,这将是十六进制颜色代码序列。第二个字符告诉它将有多少颜色代码(它以0开头。因此1表示两种颜色)。然后,它通过每个十六进制代码的六个字符进行循环,并将其添加到十六进制[]字符数组中相应的位置。十六进制[]数组是二维的,因为在第一个“维”中它有颜色的序列号,在第二个“维”中它存储该颜色的RGB值

其输出如下:

255 255 255 0 0 0 //第一部分还可以,但第二部分就搞砸了

255 255 0 0 0 0 0 0 //下一种颜色的红色值设置为上一种颜色的蓝色值

这是代码。我找不到任何更简单的方法来实现这个想法。如果你有如何使这更好或更有效的建议,请让我知道

提前谢谢

char barva[10];
char hex[10][2];
long bluetoothVal;

bluetoothVal = Serial.read();    

if (bluetoothVal == '/')
    {  
        delay(2);
        Serial.flush();
        input=Serial.read();
        char load = input;
        int steps = load - '0';

        for (int counter = 0; counter <= steps; counter++)
        {

            for (int i = 0; i <= 5; i++)
            {
                delay(2);
                Serial.flush();

                delay(2);
                Serial.flush();
                bluetoothVal=Serial.read();
                char load = bluetoothVal;

                barva[i] = load;    
            }

            long int rgb = strtol(barva,0,16); //=>rgb=0x001234FE;
            hex[counter][0] = (byte)(rgb>>16);
            hex[counter][1] = (byte)(rgb>>8);
            hex[counter][2] = (byte)(rgb);

            Serial.println(hex[counter][0]);
            Serial.println(hex[counter][1]);
            Serial.println(hex[counter][2]);       
        }

        for (int i = 0; i <= 1; i++)
        {
          Serial.println("");
          Serial.println(hex[i][0]);
          Serial.println(hex[i][1]);
          Serial.println(hex[i-1][2]);    
        }
    }
charbarva[10];
字符十六进制[10][2];
长蓝牙;
bluetoothVal=Serial.read();
如果(bluetoothVal=='/'))
{  
延迟(2);
Serial.flush();
输入=Serial.read();
字符加载=输入;
整数步数=加载-'0';
用于(整数计数器=0;计数器>16);
十六进制[计数器][1]=(字节)(rgb>>8);
十六进制[计数器][2]=(字节)(rgb);
Serial.println(十六进制[计数器][0]);
Serial.println(十六进制[计数器][1]);
Serial.println(十六进制[计数器][2]);
}

for(int i=0;i
hex
应声明为

char hex[10][3];

你在一个地方访问
hex
作为
hex[计数器][2]=(字节)(rgb);
因此你需要一个10*3的数组。

C++或C?决定。不能两者都是。删除C标记,因为
Serial
是一个类。真的吗?哈哈,我已经想了两天,终于让它工作了。非常感谢!!:D