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

问题描述:

我正在制作一个项目,其中6个RFID阅读器上的RFID标签将创建一个6位十六进制代码,该代码将通过RGB转换并输出。如何更改数组中的值并将其转换为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); 
} 

任何形式的输入将不胜感激,这是第一次写在别的东西比javascript。

谢谢。

+1

*不正确*转换的最后一个值 - 你得到什么样的价值?此外,将整个十六进制字符串转换为单个整数并使用位移可以更容易地提取所需内容。 – Kevin

+1

在一个不相关的说明中,它看起来像是在为Arduino编程,这意味着您确实正在编程C++的一部分。 –

+0

使用hexColor [5] ='3' – anil

你正在做的主要错误是混乱"3"'3'

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

你想要做的是:

hexColor[6] = '3'; 

这应该工作:

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]); 
} 

Outout: #FFFFFF#FFFFF3