一段时间以来,我一直在尝试如何在嵌入式C++中执行此操作,对于RGB888中的网站,我有一个十六进制颜色,例如“#ba00ff”,我想将其转换为C++ RGB555十六进制值,例如0x177C
目前,我已经从字符串中修剪了#,并一直坚持将其转换为可用于创建RGB555的类型
我的代码目前看起来像
p_led_struct->color = "#ba00ff";
char hexString[7] = {};
memmove(hexString, p_led_struct->color+1, strlen(p_led_struct->color));
byte colorBytes[3];
sscanf(hexString,"%x%x%x",&colorBytes);
尽管colorBytes数组的数据不正确,hexString值仍正确变为“ba00ff”。
我应该如何进行此转换的任何帮助都将非常棒:)
谢谢!
最佳答案
sscanf(hexString,"%x%x%x",&colorBytes);
的问题是:
sscanf
希望您提供3个int
作为参数,但只给出一个数组,而不是int
。 %x
读取超过2个字符。 尝试:
int r, g, b;
if(sscanf(hexString,"%2x%2x%2x", &r, &g, &b) != 3) {
// error
}
编辑:
关于scanf-family的非常有用的信息:http://en.cppreference.com/w/c/io/fscanf
关于c++ - C/C++十六进制char *到字节数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19115903/