从 C++ 中的 char var 创建字符串

Create a string from the char var in C++

提问人:Damiano Miazzi 提问时间:3/2/2023 最后编辑:BolderayskyDamiano Miazzi 更新时间:3/16/2023 访问量:96

问:

我编写了这个 c++ 函数,用于从在线服务器读取时间戳。

我尝试将 dayOfweek 转换为 String。char[]

void printLocalTime()
{
  struct tm tm;
  if(!getLocalTime(&tm)){
    Serial.println("Failed to obtain time");
    return;
  }
 
  Serial.println(&tm, "%A, %B %d %Y %H:%M:%S");

  char dayOfweek[8];
  strftime(dayOfweek,8, "%A", &tm);

  // take dayofweek and convert in String????
}

我怎样才能转换成 ?char[]String

C++ 字符串 datetime 变量 char

评论

0赞 MikeCAT 3/2/2023
什么?你的意思是 std::string 还是来自非标准库的东西?String
2赞 Alan Birtles 3/2/2023
@MikeCAT这看起来像Arduino代码
0赞 Bolderaysky 3/2/2023
在您的情况下,已经是字符串,但 c 字符串(字符数组)。如果你想把它转换为 std::string,那么事情就很容易了,因为 std::string 有 的构造函数。看代码,有点像 arduino/esp 的东西,所以不清楚你想把它转换成什么字符串,因为在 arduino 上也有类型,它与dayOfweekchar[]Serial.printlnStringstd::string
0赞 Abderrahmene Rayene Mihoub 3/2/2023
这回答了你的问题吗?如何将char数组转换为字符串?
3赞 MikeCAT 3/2/2023
您只需将字符数组传递给构造函数即可创建Arduino String

答:

0赞 Hudson 3/16/2023 #1

您可以只对字符串使用 + 运算符并连接字符:

// n is size of char array Arr
string temp = "";
for (int i = 0; i < n; i++) {
    temp += Arr[i];
}
// temp is now the string version of Arr

这在 O(N) 复杂度下执行。

0赞 viraltaco_ 3/16/2023 #2

顺便说一句,“星期三”是一个 10 个字符的字符串......
根据区域设置,您可能会遇到问题。

假设你想要一个:std::string

char week_day[16] = {};
const auto k = std::strftime(week_day, 16, "%A", &tm);
if (k == 0) { /* strftime failed */ }
auto str = std::string(week_day, week_day + k);

在 Compiler Explorer 上直播

要制作Arduino字符串,我相信您可以将最后一行替换为:

auto str = String(week_day);

只要足够大,并且在将其传递给之前初始化为零(以便字符串以 null 结尾)。week_daystd::strftime