繁体   English   中英

如何将 const unsigned char 值分配给 C++ 中条件内的变量?

[英]How can I assign a const unsigned char value to a variable inside a condition in c++?

我正在使用 C++ 对微控制器进行编程,我遇到了这种情况。

我在.h文件中有几个const unsigned char 前任:

const unsigned char epd_bitmap_icon1 [] = {...
const unsigned char epd_bitmap_icon2 [] = {...

我有一个函数采用以下变量之一:

void drawBitmap(int16_t x, int16_t y, uint8_t *bitmap, int16_t w, int16_t h, uint16_t color);

在这种情况下,我需要根据某个值有条件地传递不同的位图。

在 python 中会是这样的:

if value > 80:
    icon = epd_bitmap_icon1
elif value > 30:
    icon = epd_bitmap_icon2
else:
    icon = edp_bitmap_icon3

然后将icon值作为第三个参数传递给drawBitmap

我不知道如何在 C++ 中做到这一点,我试过这个:

    if (batteryChargePercent > 80) {
        unsigned char* icon = epd_bitmap_icon1;
    }
    else if (batteryChargePercent > 30) {
        unsigned char* icon = epd_bitmap_icon2;

    } else {
        unsigned char* icon = epd_bitmap_icon3;
    }

但我得到这个错误:

error: invalid conversion from 'const unsigned char*' to 'unsigned char*' [-fpermissive]

if if分配它。

const unsigned char *icon;
if (batteryChargePercent > 80) {
    icon = epd_bitmap_icon1;
} else if (batteryChargePercent > 30) {
    icon = epd_bitmap_icon2;
} else {
    icon = epd_bitmap_icon3;
}

您需要在指针声明中使用const来解决错误消息。

对于简单的情况,您可以使用三元:


const unsigned char* icon = batteryChargePercent > 80 ? epd_bitmap_icon1 :
                      batteryChargePercent > 30 ? epd_bitmap_icon2 :
                                                  epd_bitmap_icon3;

或者,如果它更复杂,您可以使用现场调用的 lambda:

const unsigned char* icon = [&]() {
    if (batteryChargePercent > 80) {
        return epd_bitmap_icon1;
    }
    else if (batteryChargePercent > 30) {
        return epd_bitmap_icon2;
    } else {
        return epd_bitmap_icon3;
    }
}();

此外,虽然还不是标准的,但语句表达式可能会帮助您:

const unsigned char* icon = ({
    const unsigned char* retval;
    if (batteryChargePercent > 80) {
        retval = epd_bitmap_icon1;
    }
    else if (batteryChargePercent > 30) {
        retval = epd_bitmap_icon2;
    } else {
        retval = epd_bitmap_icon3;
    }
    retval;
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM