Процесс ввода и тип для статического массива uint8_t - PullRequest
0 голосов
/ 12 сентября 2018

В настоящее время я пытаюсь преобразовать целочисленную переменную в значение статического массива uint8_t в IDE Arduino.

Я использую:

#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 голосов
/ 12 сентября 2018

Как массив uint8_t может иметь строковый ввод и нормально работать, но не когда переменная задействована

Строковый литерал, по сути, представляет собой массив символов с завершающим нулем. Так

static uint8_t hello[] = "world";

По существу

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

Что также является обычной инициализацией копирования массива, и необходимый размер автоматически определяется из значения, поэтому вы можете использовать [], а не [размер]

Как создать переменную int в качестве входных данных для массива uint8_t

Поскольку размер int известен во время компиляции, вы можете создать массив размером int и скопировать в него значение int побайтно с memcpy:

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));

В зависимости от того, что вам нужно, вы можете также обработать завершающий ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...