一段时间以来,我一直在尝试如何在嵌入式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/

    10-10 13:21