【问题标题】:Converting String style from Arduino to C common style将字符串样式从 Arduino 转换为 C 通用样式
【发布时间】:2013-05-10 18:34:31
【问题描述】:

我有以下代码

void loop() {
  String outMessage = "";  // String to hold input

  while (Serial.available() > 0) {  // check if at least one char is available
    char inChar = Serial.read();
    outMessage.concat(inChar);  // add Chars to outMessage (concatenate)
  }

  if (outMessage != "") {
    Serial.println("Sent:  " + outMessage); // see in Serial Monitor
    Serial1.write(outMessage); // Send to the other Arduino
  }

我想用通用的 C 语言来写。

Arduino String 类是 0019 版核心的一部分,它允许我们以比字符数组更复杂的方式使用和操作文本字符串。

我不知道哪种方式更适合编程。我唯一知道的是String 占用大量内存。有什么建议吗?

【问题讨论】:

  • 如果你只想用C,用char*

标签: c string arduino


【解决方案1】:

没有“Arduino 语言”这样的东西。 Arduino(好吧,而不是内部的 AVR)是使用 C、C++ 或汇编程序进行编程的,Arduino 核心库为常见任务提供了一些 C 函数(以及 AVR-libc)和 C++ 类。您实际上在这里尝试做的是将代码从 C++ 转换为 C。

具体来说,在 C 中,字符串是以 0 结尾的 char 数组,因此您可以执行以下操作:

char welcome[] = "Hello world!";

Moar...

【讨论】:

    【解决方案2】:

    不应该太难。我喜欢使用 char 数组,因为真的一点也不难。但是,要连接两个 char 数组,您必须知道它们的大小,并且您必须创建一个大小为第一个 char 数组 + 第二个 char 数组的第三个缓冲区。唯一的问题是找到大小。这可以通过一个简单的结构来完成:

     typedef struct String{
        int size;
        char * chararray;
    
     }String;
    

    然后您必须使用大小对 chararray 进行 malloc 并填充整数值。

    之后剩下的就很简单了。

    【讨论】:

    • 就是这样。我想要大小可变的东西。
    • 当你想要大小可变的东西时,你能澄清一下你的意思吗?我解释对了吗?
    • 我想要协议之类的东西,例如字符串将是:[3bytes][variable lenght][3bytes]。变量用于数据(文本)
    • 你可以用 malloc 和 calloc 做到这一点。如果最后有 3 个字节,则必须存储它们,然后用 calloc 扩展 char 数组,然后将最后 3 个字节复制回返回的 calloc 空间。您仍然必须跟踪大小,这就是为什么我说使用结构应该更容易。
    • 我可以使用 Arduino String 并将所有这些信息放在同一个字符串中吗?然后我可以操作字符串并只获取我想要的数据?
    猜你喜欢
    • 2011-01-15
    • 1970-01-01
    • 2014-12-28
    • 2021-12-12
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2014-09-25
    • 2013-10-07
    相关资源
    最近更新 更多