Arduino const char*和uint_8相互转换
时间: 2023-08-05 07:15:32 浏览: 67
将 `const char*` 转换为 `uint8_t` 数组:
```
const char* str = "Hello World";
uint8_t* arr = (uint8_t*) str;
```
将 `uint8_t` 数组转换为 `const char*`:
```
uint8_t arr[] = {72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100};
const char* str = (const char*) arr;
```
需要注意的是,将 `const char*` 转换为 `uint8_t` 数组时,需要将指针转换为 `uint8_t*` 类型,但是这可能导致一些问题,例如字节对齐等。因此,这种转换方法可能不是最佳的解决方案。
相关问题
C:\Users\Administrator\AppData\Local\Temp\.arduinoIDE-unsaved2023620-4200-iksi8r.v6bsj\sketch_jul20a\sketch_jul20a.ino: In function 'void loop()': C:\Users\Administrator\AppData\Local\Temp\.arduinoIDE-unsaved2023620-4200-iksi8r.v6bsj\sketch_jul20a\sketch_jul20a.ino:107:48: error: no matching function for call to 'U8GLIB_SSD1306_128X64::drawStr(int, int, StringSumHelper&)' u8g.drawStr(80, 12, "Value: " + String(angle)); ^ In file included from C:\Users\Administrator\AppData\Local\Temp\.arduinoIDE-unsaved2023620-4200-iksi8r.v6bsj\sketch_jul20a\sketch_jul20a.ino:7:0: c:\Users\Administrator\Documents\Arduino\libraries\U8glib\src/U8glib.h:171:16: note: candidate: u8g_uint_t U8GLIB::drawStr(u8g_uint_t, u8g_uint_t, const char*) u8g_uint_t drawStr(u8g_uint_t x, u8g_uint_t y, const char *s) { return u8g_DrawStr(&u8g, x, y, s); } ^~~~~~~ c:\Users\Administrator\Documents\Arduino\libraries\U8glib\src/U8glib.h:171:16: note: no known conversion for argument 3 from 'StringSumHelper' to 'const char*' c:\Users\Administrator\Documents\Arduino\libraries\U8glib\src/U8glib.h:201:16: note: candidate: u8g_uint_t U8GLIB::drawStr(u8g_uint_t, u8g_uint_t, const __FlashStringHelper*) u8g_uint_t drawStr(u8g_uint_t x, u8g_uint_t y, const __FlashStringHelper *s) { return u8g_DrawStrP(&u8g, x, y, (u8g_pgm_uint8_t *)s); } ^~~~~~~ c:\Users\Administrator\Documents\Arduino\libraries\U8glib\src/U8glib.h:201:16: note: no known conversion for argument 3 from 'StringSumHelper' to 'const __FlashStringHelper*' exit status 1 Compilation error: no matching function for call to 'U8GLIB_SSD1306_128X64::drawStr(int, int, StringSumHelper&)'
根据你提供的错误信息,看起来是在调用`u8g.drawStr()`函数时出现了问题。错误信息显示没有匹配的函数来处理传递给函数的参数。
在U8glib库中,`drawStr()`函数的第三个参数应该是一个`const char*`类型的字符串,而你传递给它的是一个`StringSumHelper`类型的对象,这导致了错误。
为了解决这个问题,你可以使用`String`对象的`c_str()`方法将其转换为`const char*`类型的字符串。请尝试修改你的代码如下:
```cpp
u8g.drawStr(80, 12, ("Value: " + String(angle)).c_str());
```
上述代码将把拼接的字符串转换为`const char*`类型,并传递给`drawStr()`函数。
请确保你已经正确包含了U8glib(或U8g2)库,并按照库的文档和示例进行正确的函数调用。
如果你仍然遇到问题,请提供更多的代码和错误信息,以便我更好地帮助你解决问题。
以上代码在设置按钮尺寸时报错too few arguments to function 'void lv_btnmatrix_set_btn_width(lv_obj_t*, uint16_t, uint8_t)'
非常抱歉,我的回答仍然有误。在lvgl的Arduino库中,`lv_btnmatrix_set_btn_width()`和`lv_btnmatrix_set_btn_height()`函数的参数列表与lvgl的标准库略有不同,需要增加一个参数`mode`,用于指定尺寸设置的模式。具体来说,`mode`可以为以下两个值之一:
- `LV_BTNMATRIX_MODE_REL`: 表示设置按钮的相对尺寸,即相对于`btnmatrix`的大小进行缩放。此时,`btn_w`和`btn_h`的值应该为`0~100`之间的百分比值。
- `LV_BTNMATRIX_MODE_TILED`: 表示设置按钮的固定尺寸,即每个按钮的大小都相同。此时,`btn_w`和`btn_h`的值应该为具体的像素值。
因此,如果你希望设置每个按钮的实际显示尺寸,可以使用以下代码:
```c
/* 创建一个4x3的btnmatrix */
lv_obj_t * btnmatrix = lv_btnmatrix_create(lv_scr_act(), NULL);
/* 设置每个按钮的固定尺寸为60x40 */
lv_btnmatrix_set_btn_width(btnmatrix, 60, LV_BTNMATRIX_MODE_TILED);
lv_btnmatrix_set_btn_height(btnmatrix, 40, LV_BTNMATRIX_MODE_TILED);
/* 设置每个按钮的文本对齐方式 */
lv_btnmatrix_set_align(btnmatrix, LV_LABEL_ALIGN_CENTER);
/* 设置每个按钮的文本 */
const char * btn_map[] = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "0", "#"};
lv_btnmatrix_set_map(btnmatrix, btn_map);
```
在上面的代码中,我们通过`LV_BTNMATRIX_MODE_TILED`模式来设置每个按钮的固定尺寸,具体的像素值分别为`60`和`40`。这样,每个按钮的大小都会被设置为`60x40`像素。
需要注意的是,如果你使用的是`LV_BTNMATRIX_MODE_REL`模式,`btn_w`和`btn_h`的值应该为`0~100`之间的百分比值,例如`50`表示相对于`btnmatrix`大小的`50%`。