【发布时间】:2013-10-07 14:18:33
【问题描述】:
一段时间以来,我一直在尝试如何在嵌入式 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”。
任何关于我应该如何进行这种转换的帮助都会很棒:)
谢谢!
【问题讨论】:
-
如果跳过第一个字符,字符串长度不需要减1吗?
-
我相信字符串 '/n' 的结尾使 "ba00ff" 有 7 个字符,我不确定 sscanf 中没有字符串 char 结尾的 char 数组是否会导致错误。 编辑抱歉,我的意思是“空终止”
\0不是/n -
'/n' 是换行符,而不是终止符。您的字符串中没有换行符。
-
但我很少使用 C 字符串,所以我可能对字符串长度有误。
-
memmove很好;最好在字符串末尾加上'\0'。