簡體   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