c - 如何将字节转换为整数?

标签 c arduino

我有一个 Arduino,它正在从一个程序中读取一组三个字节,这些字节对应于执行器必须转动的度数。我需要将这些字节转换为整数,以便将这些整数传递给我的执行器。

例如,我知道我从程序接收到的默认静止状态值是 127。我编写了一个 C# 程序来解释这些字节,并且可以将它们转换为单个整数值。但是,我无法弄清楚如何在 Arduino 环境中使用 C 执行此操作。我尝试将每个字节类型转换为 char 并将其存储在字符串中。但是,这会返回毫无意义的乱码值。

void loop() {
 if(Serial.available() && sw)
 {
  for(int j = 0; j < 3; j++)
  {
    input[j] = Serial.read();
  }
  //command = ((String)input).toInt();
  sw = 0;

}

String myString = String((char *)input);

Serial.println(myString);

最佳答案

  1. Serial.read() 的返回值是一个int。因此,如果您有以下代码片段:

    int input[3];
    
    for (int i = 0; i < 3; i++) {
      input[i] = Serial.read();
    }
    

    那么 input 应该存储三个 int。但是,代码:

    char* input[3];
    
    for (int i = 0; i < 3; i++) {
     input[i] = Serial.read();
    }
    

    将只存储从 intchar 的字节转换。

  2. 如果要将其存储为字符串,则需要进行适当的转换。在这种情况下,使用 itoa(参见 Arduino API description)。

    代码片段为:

    #include <stdlib>
    char* convertedString = itoa(input[i]);
    

关于c - 如何将字节转换为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24597929/

相关文章:

c++ - 调试时找不到 "arm-elf-g++"

使用 curl 为 PAM 模块编译目标文件

c - c 中的链表(从文件中读取)

c - 模块化编译时数组扩展

c - 接收一个字符并输出其 ASCII 十六进制值

c++ - 按名称存储和引用变量列表

c - Arduino (AVR ATMega328) Timer1 似乎没有在正确的时间触发

c - 赋值 c 中的不兼容类型

c++ - 跟踪/系统调用 "Print Screen"进程

c++ - 修复 TinyWireS 库的 I2C 地址问题