我可以用字符串文字初始化 std::array<uint8_t 吗?

Can I initialize a std::array<uint8_t with a string literal?

我编写了很多使用 UART 串​​行端口与仪器交互的 C 代码。我正在开始一个新项目,我试图在 C++ 中使用更面向对象的方法。以下是我过去使用 C 定义和发送命令的方式。

uint8_t  pubx04Cmd[] = "$PUBX,04*37\r\n";
HAL_UART_Transmit(&hUART1, pubx04Cmd, sizeof(pubx04Cmd), 5000); 

这非常简单。 C++ std::arrays 具有内置的大小,这似乎很有用。但这是我想出的唯一方法。

const char pubx04CString[] = "$PUBX,04*37\r\n";
std::array<uint8_t, 14> pubx04CPPArray;
std::copy(std::begin(pubx04CString), std::end(pubx04CString), pubx04CPPArray.begin());
HAL_UART_Transmit(&hUART1, pubx04CPPArray.data(), pubx04CPPArray.size(), 5000);

与 C 语言相比,这看起来很笨拙。

std::array 是一个聚合,即可能的实现可能像

template <typename T, size_t S>
struct array {
  T a[S];
  // ...
};

封闭的数组可以像往常一样初始化:

std::array<uint8_t, 14> pubx04Cmd{"$PUBX,04*37\r\n"};