如何更改数组中的值并转换为 RGB
How to change value in array and convert to RGB
我正在做一个项目,其中 6 个 RFID 阅读器上的 RFID 标签将创建一个 6 位十六进制代码,该代码将通过 RGB 转换和输出。
我正在将 HEX 值转换为 RGB 值并连续打印这些值,效果很好。例如,当我写#FFFFFF 时,Serial 会打印其各自的 RGB 值 - 255、255、255。
但是,我希望能够一次替换一个 HEX 代码中的字母,这应该会连续更改其RGB 输出。在此示例中,我试图将#FFFFFF 的最后一个字母替换为 3 - #FFFFF3。 Serial 仍然正确读取前两个值,但没有正确转换最后一个值。
我读到最好用新值创建一个新数组 -
而不是替换值和更改数组,但不知道如何操作。这是我现在得到的:
#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 以外的内容。
谢谢。
这应该有效:
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]);
}
输出:
#FFFFFF #FFFFF3
您犯的主要错误是混淆了 "3"
和 '3'
。
"3"
是一个字符串,在 C 中它是一个以 null 结尾的字符数组,而 '3'
是字符 3
。所以
hexColor[6] = "3";
表示:"write the memory address of the string "3"
into hexColor[6]
".
您想做的是:
hexColor[6] = '3';
我正在做一个项目,其中 6 个 RFID 阅读器上的 RFID 标签将创建一个 6 位十六进制代码,该代码将通过 RGB 转换和输出。
我正在将 HEX 值转换为 RGB 值并连续打印这些值,效果很好。例如,当我写#FFFFFF 时,Serial 会打印其各自的 RGB 值 - 255、255、255。
但是,我希望能够一次替换一个 HEX 代码中的字母,这应该会连续更改其RGB 输出。在此示例中,我试图将#FFFFFF 的最后一个字母替换为 3 - #FFFFF3。 Serial 仍然正确读取前两个值,但没有正确转换最后一个值。
我读到最好用新值创建一个新数组 - 而不是替换值和更改数组,但不知道如何操作。这是我现在得到的:
#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 以外的内容。
谢谢。
这应该有效:
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]);
}
输出: #FFFFFF #FFFFF3
您犯的主要错误是混淆了 "3"
和 '3'
。
"3"
是一个字符串,在 C 中它是一个以 null 结尾的字符数组,而 '3'
是字符 3
。所以
hexColor[6] = "3";
表示:"write the memory address of the string "3"
into hexColor[6]
".
您想做的是:
hexColor[6] = '3';