从 const uint8_t* 转换为 uint8_t* 时出错

Posted

技术标签:

【中文标题】从 const uint8_t* 转换为 uint8_t* 时出错【英文标题】:Error in conversion from const uint8_t* to uint8_t* 【发布时间】:2022-01-22 02:15:45 【问题描述】:

尝试使用此代码为 Arduino Nano 构建代码。我从const uint8_t* 转换为uint8_t* 时出错。完全理解这个问题,但我不知道如何解决这个问题。

  myOLED.drawBitmap(0, 0, VUMeter, 128, 64);       // draws background

VUMeter 描述为:

const uint8_t VUMeter[] PROGMEM = ...

来自库 OLED 的函数 drawBitmap:

drawBitmap(int x, int y, uint8_t* bitmap, int sx, int sy);

您能帮我理解解决问题的方法吗?

【问题讨论】:

这肯定是您的库中的一个缺陷,drawBitmap 不会修改位图。一个简单的演员应该会有所帮助。 @datafiddler,但我猜它不会从 PROGMEM 读取数组 因为它必须使用访问 PROGMEM 的函数来读取它。 arduino.cc/reference/en/language/variables/utilities/progmem @SembeiNorimaki,仔细阅读 @MarkRansom:理论上是的。这就是编译器希望您明确确认的原因。这里是为了绕过库中的错误,而应该修复它。 【参考方案1】:

真正的解决方案是修复和增强您的库。改变

drawBitmap(int x, int y, uint8_t* bitmap, int sx, int sy);

drawBitmap(int x, int y,const uint8_t* bitmap, int sx, int sy);

并添加一个额外的方法

drawBitmap_P (int x, int y, const uint8_t* bitmap, int sx, int sy);

从 PROGMEM 中获取位图字节

【讨论】:

以上是关于从 const uint8_t* 转换为 uint8_t* 时出错的主要内容,如果未能解决你的问题,请参考以下文章

如何将 const uint8_t [] 转换为 std::string?

错误:从“uint8_t* aka unsigned char*”转换为“unsigned int”会丢失精度 [-fpermissive]

在 C++ 中从 size_t 转换/转换为 uint8_t?

从 uint8_t* 到 uint32_t 的无效转换 - 从 32 位架构迁移到 64 位架构时?

将 std::vector<uint8_t> 转换为 QImage

C ++将mac id字符串转换为uint8_t数组