Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何更改数组中的值并转换为RGB_C_Arrays_Hex_Rgb - Fatal编程技术网

C 如何更改数组中的值并转换为RGB

C 如何更改数组中的值并转换为RGB,c,arrays,hex,rgb,C,Arrays,Hex,Rgb,我正在做一个项目,6个RFID阅读器上的RFID标签将创建一个6位十六进制代码,该代码将通过RGB转换和输出 我正在将十六进制值转换为RGB值,并以串行方式打印这些值,效果很好。例如,当我写入#FFFFFF时,串行打印其各自的RGB值-255、255、255 但是,我希望能够一次替换十六进制代码中的一个字母,这将改变其串行RGB输出。在本例中,我试图将#FFFFFF的最后一个字母替换为3-#FFFFF3。串行仍能正确读取前两个值,但不能正确转换最后一个值 我已经读到,最好用新值创建一个新数组-

我正在做一个项目,6个RFID阅读器上的RFID标签将创建一个6位十六进制代码,该代码将通过RGB转换和输出

我正在将十六进制值转换为RGB值,并以串行方式打印这些值,效果很好。例如,当我写入#FFFFFF时,串行打印其各自的RGB值-255、255、255

但是,我希望能够一次替换十六进制代码中的一个字母,这将改变其串行RGB输出。在本例中,我试图将#FFFFFF的最后一个字母替换为3-#FFFFF3。串行仍能正确读取前两个值,但不能正确转换最后一个值

我已经读到,最好用新值创建一个新数组- 而不是替换一个值和更改数组,但不知道如何更改。以下是我现在得到的:

#include <stdlib.h>
#include <string.h>

void setup() {
Serial.begin(9600);
}

char hexColor[] = "#FFFFFF";
void HEXtoRGB();


void HEXtoRGB() {
hexColor[6] = "3";

char red[5] = {0};
char green[5] = {0};
char blue[5] = {0};

red[0] = green[0] = blue[0] = '0';
red[1] = green[1] = blue[1] = 'X';

red[2] = hexColor[1];
red[3] = hexColor[2];

green[2] = hexColor[3];
green[3] = hexColor[4];

blue[2] = hexColor[5];
blue[3] = hexColor[6];

long r = strtol(red, NULL, 16);
long g = strtol(green, NULL, 16);
long b = strtol(blue, NULL, 16);

Serial.println(r);
Serial.println(g);
Serial.println(b);
Serial.println(hexColor);
}
#包括
#包括
无效设置(){
Serial.begin(9600);
}
char hexColor[]=“#FFFFFF”;
void HEXtoRGB();
void HEXtoRGB(){
hexColor[6]=“3”;
焦红[5]={0};
炭绿[5]={0};
炭蓝[5]={0};
红色[0]=绿色[0]=蓝色[0]='0';
红色[1]=绿色[1]=蓝色[1]='X';
红色[2]=六色[1];
红色[3]=六色[2];
绿色[2]=六色[3];
绿色[3]=六色[4];
蓝色[2]=六色[5];
蓝色[3]=六色[6];
长r=strtol(红色,空,16);
长g=strtol(绿色,空,16);
长b=strtol(蓝色,空,16);
序列号println(r);
序列号println(g);
序列号println(b);
Serial.println(hexColor);
}
任何类型的输入都将非常感谢,这是第一次用javascript以外的语言编写

谢谢。

这应该可以:

char hexColor[7] = "#FFFFFF";
int main(){
    for(int i=0; i<7; i++)
        printf("%c ", hexColor[i]);
    hexColor[6]='3';
    for(int i=0; i<7; i++)
        printf("%c ", hexColor[i]);
}
char-hexColor[7]=“#FFFFFF”;
int main(){
对于(int i=0;i这应该可以:

char hexColor[7] = "#FFFFFF";
int main(){
    for(int i=0; i<7; i++)
        printf("%c ", hexColor[i]);
    hexColor[6]='3';
    for(int i=0; i<7; i++)
        printf("%c ", hexColor[i]);
}
char-hexColor[7]=“#FFFFFF”;
int main(){

对于(int i=0;i您所做的主要错误是将
“3”
'3'
混淆

“3”
是一个字符串,在C中是以null结尾的字符数组,而
'3'
是字符
3
hexColor[6]=“3”
表示:“将字符串
“3”
的内存地址写入
hexColor[6]

你想做的是:

hexColor[6] = '3';

您正在执行的主要错误是将
“3”
'3'
混淆

“3”
是一个字符串,在C中是以null结尾的字符数组,而
'3'
是字符
3
hexColor[6]=“3”
表示:“将字符串
“3”
的内存地址写入
hexColor[6]

你想做的是:

hexColor[6] = '3';

不正确转换最后一个值-你得到什么值?也可能更容易将整个十六进制字符串转换为一个整数,并使用位移位来拔出你需要的。在一个无关的注释中,看起来你正在为一个ARDUIO编程,这意味着你真的在(C++的一个子集)编程。='3'在另一个不相关的注释中,函数不需要
“0x”
prefix如果你正确设置了基数,你会这样做。没有正确转换最后一个值-你得到的是什么值?另外,将整个十六进制字符串转换为一个整数并使用位移位提取你需要的内容可能更容易。在一个不相关的注释中,看起来你是在为Arduino编程,这意味着你是真实的在C++的子集中编程。在另一个无关的注释中使用HexFiel[5 ]='3,如果你正确地设置了基点,函数不需要<代码> 0x”/Cord>前缀。