2017-05-25 98 views
0

我正在製作一個項目,其中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

回答

2

你正在做的主要錯誤是混亂"3"'3'

"3"是一個字符串,它在C中是一個以空字符結尾的字符數組,而'3'是字符3。所以 hexColor[6] = "3";表示:「將字符串"3"的內存地址寫入hexColor[6]」。

你想要做的是:

hexColor[6] = '3'; 
0

這應該工作:

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