如何将byte转换为int?

时间:2014-07-06 16:26:44

标签: c arduino

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

例如,我知道我从程序收到的默认休止状态值是127.我写了一个C#程序来解释这些字节,并且可以将它们转换为单个整数值。但是,我无法弄清楚如何在带有C的Arduino环境中执行此操作。我已尝试将每个字节进行类型转换为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);

}

3 个答案:

答案 0 :(得分:2)

这应该有效:

int command = input[0]*256*256 + input[1]*256 + input[2];

顺便说一下,用来编写Arduino的默认语言是C ++,而不是C.虽然它们有一些相似之处。

答案 1 :(得分:1)

以下逻辑将帮助您

iDst = (cSrc[0] << 16) | (cSrc[1] << 8) | cSrc[2]

或者你可以在这种情况下使用union

union byte2char
{
    char c[4];
    int i;
};

但工会实施需要考虑小端和大端系统

答案 2 :(得分:1)

这里有两件事:

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

    int input [3];

    for(int i = 0; i&lt; 3 i ++){

    输入[I] = Serial.read()

    }

  2. 然后输入应存储三个整数。但是,代码:

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

    只是将字节转换从int存储到char。

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

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