C++ 数组损坏其字符C++;
我正在为Arduino编写一个小程序,它能够从十六进制颜色代码的字符数组中读取RGB值。让我举个例子,因为很难用不同的方式来解释: 例如,从arduino串行监视器I发送: /1FFFFF000000 第一个字符告诉Arduino,这将是十六进制颜色代码序列。第二个字符告诉它将有多少颜色代码(它以0开头。因此1表示两种颜色)。然后,它通过每个十六进制代码的六个字符进行循环,并将其添加到十六进制[]字符数组中相应的位置。十六进制[]数组是二维的,因为在第一个“维”中它有颜色的序列号,在第二个“维”中它存储该颜色的RGB值 其输出如下: 255 255 255 0 0 0 //第一部分还可以,但第二部分就搞砸了 255 255 0 0 0 0 0 0 //下一种颜色的红色值设置为上一种颜色的蓝色值 这是代码。我找不到任何更简单的方法来实现这个想法。如果你有如何使这更好或更有效的建议,请让我知道 提前谢谢C++ 数组损坏其字符C++;,c++,arrays,arduino,arduino-uno,C++,Arrays,Arduino,Arduino Uno,我正在为Arduino编写一个小程序,它能够从十六进制颜色代码的字符数组中读取RGB值。让我举个例子,因为很难用不同的方式来解释: 例如,从arduino串行监视器I发送: /1FFFFF000000 第一个字符告诉Arduino,这将是十六进制颜色代码序列。第二个字符告诉它将有多少颜色代码(它以0开头。因此1表示两种颜色)。然后,它通过每个十六进制代码的六个字符进行循环,并将其添加到十六进制[]字符数组中相应的位置。十六进制[]数组是二维的,因为在第一个“维”中它有颜色的序列号,在第二个“维”
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;ihex
应声明为
char hex[10][3];
你在一个地方访问hex
作为hex[计数器][2]=(字节)(rgb);
因此你需要一个10*3的数组。C++或C?决定。不能两者都是。删除C标记,因为Serial
是一个类。真的吗?哈哈,我已经想了两天,终于让它工作了。非常感谢!!:D