Arduino IDE, эквивалентный DataView?

Я работаю над проектом с командами Bluetooth между различными устройствами. Я хотел бы попытаться преобразовать строку в объект DataView на Arduino, чтобы я мог отправить ее через BLE, как эта функция, написанная на Javascript:

function str2DV(str) {
  var buf = new ArrayBuffer(str.length);
  var bufView = new Uint8Array(buf);
  for (var i=0, strLen=str.length; i<strLen; i++) {
    bufView[i] = str.charCodeAt(i);
  }
  var DV = new DataView(buf);
  return DV;
}

Возможно ли это с Arduino? Я еще не нашел решения....

, 👍3

Обсуждение

Вы видели эту библиотеку? https://github.com/bakercp/BufferUtils, @VE7JRO


1 ответ


Лучший ответ:

4

В среде Arduino DataView бесполезен. в Язык JavaScript, строка и массив байтов — это два очень разные вещи. Вот почему вам нужно что-то вроде этого str2DV() функция преобразования между ними. В C++ это одно и то же. вещь: не нужно конвертировать. Иногда тип uint8_t (также называемый byte) используется вместо char для хранения двоичных данных, но вы можно просто привести типы между этими типами. Приведение типов обычно компилируется к нулю машинных инструкций, поскольку базовое представление данных то же самое.

Например:

extern some_lib_function(const uint8_t *buffer, int buffer_length);

const char *my_message = "Hello, World!\n";
some_lib_function((uint8_t *) my_message, strlen(my_message));

Если ваша строка имеет форму объекта String, а не простого C-строка, затем используйте метод c_str(), чтобы вернуть простую строку:

String my_message = "Hello, World!\n";
some_lib_function((uint8_t *) my_message.c_str(), my_message.length());
,