静态uint8_t数组的输入过程和类型

时间:2018-09-12 07:12:36

标签: arrays static arduino byte uint

我目前正在尝试将整数变量转换为Arduino IDE中的静态uint8_t数组的值。

我正在使用:

#include <U8x8lib.h>

我确实知道uint8_t的行为类似于字节类型。

当前,数组具有一个设置值:

static uint8_t hello[] = "world";

从我的角度来看,“世界”看起来像一个字符串,所以我认为我将从创建一个字符串变量开始:

String world = "world";
static uint8_t hello[] = world;

这不起作用,并给了我错误:

initializer fails to determine size of 'hello'

如果我也这样做,而是将“ world”更改为如下所示的int ...

int world = 1;
static uint8_t hello[] = world;

我遇到了同样的错误:

initializer fails to determine size of 'hello'

我已成功通过以下过程将uint8_t数组转换为字符串:

static uint8_t hello[] = "world";
String helloconverted = String((const char*)hello);

我不理解以下内容:

  1. uint8_t数组如何具有类似字符串的输入并可以正常工作,但是在涉及变量时却无法实现

  2. 如何创建字符串变量作为uint8_t数组的输入

  3. 如何创建一个int变量作为uint8_t数组的输入

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

  

uint8_t数组如何具有类似字符串的输入并可以正常工作,但是   不是当涉及变量时

字符串常量本质上是一个以null结尾的char数组。所以

static uint8_t hello[] = "world";

本质上是

static uint8_t hello[] = {'w','o','r','l','d','\0'};

这也是普通的数组副本初始化,并且所需的大小是从值中自动推导出的,这就是为什么可以使用[]而不是[size]

的原因
  

如何创建一个int变量作为uint8_t数组的输入

由于int的大小在编译时是已知的,因此您可以创建一个int大小的数组,并使用int逐字节地将memcpy的值复制到其中: / p>

int world = 1;
static uint8_t hello[sizeof(world)];
memcpy(hello, &world, sizeof(hello));
  

如何创建字符串变量作为uint8_t数组的输入

您需要事先知道String的长度,以便创建一个足以容纳String值的数组:

String world = "Hello"; // 5 chars
static uint8_t hello[5];
world.toCharArray((char *)hello, sizeof(hello));

根据需要,您可能还需要处理终止null。